在数据可视化中,三维图经常需要添加文本标注来说明特定点的坐标或含义。matplotlib 的 mplot3d 工具包提供了 ax.text() 和 ax.text2D() 方法,支持在三维空间或二维坐标上添加标注。本文通过完整示例演示其用法,包括 zdir 方向控制、颜色设置和 2D 文本定位。
首先导入库并创建三维坐标系:- import matplotlib.pyplot as plt
- from mpl_toolkits.mplot3d import Axes3D
- fig = plt.figure()
- ax = fig.gca(projection='3d')
复制代码
示例 1:zdir 参数控制文本朝向
使用 ax.text(x, y, z, label, zdir) 可以在三维点 (x,y,z) 处显示文本。zdir 参数决定文本平面朝向哪个坐标轴(或法向量)。常见取值包括 None(面向相机)、'x'、'y'、'z' 及自定义矢量。下面的代码演示了多个点不同朝向的标注:- zdirs = (None, 'x', 'y', 'z', (1, 1, 0), (1, 1, 1))
- xs = (1, 4, 4, 9, 4, 1)
- ys = (2, 5, 8, 10, 1, 2)
- zs = (10, 3, 8, 9, 1, 8)
- for zdir, x, y, z in zip(zdirs, xs, ys, zs):
- label = '(%d, %d, %d), dir=%s' % (x, y, z, zdir)
- ax.text(x, y, z, label, zdir)
- # 同时用散点标记这些点(以第一个点为例)
- ax.scatter(1, 2, 10, marker="o")
复制代码
示例 2:设置文本颜色
通过 color 参数(或 c)可以为文本指定颜色。下面的代码在 (9,0,0) 处添加红色文本,并用三角形散点标记该点:- ax.text(9, 0, 0, "red", color='red')
- ax.scatter(9, 0, 0, marker="v", c="r")
复制代码
示例 3:使用 text2D 添加不受投影影响的二维文本
text2D 将文本固定在图形窗口的某个位置,不随三维视角旋转。坐标 (0,0) 表示左下角,(1,1) 表示右上角。参数 transform=ax.transAxes 将坐标系统映射到轴域:- ax.text2D(0.5, 1, "2D Text", transform=ax.transAxes)
复制代码
最后调整三个坐标轴的范围和标签,使图表更清晰:- ax.set_xlim(0, 10)
- ax.set_ylim(0, 10)
- ax.set_zlim(0, 10)
- ax.set_xlabel('X axis')
- ax.set_ylabel('Y axis')
- ax.set_zlabel('Z axis')
- plt.show()
复制代码
总结要点:
- ax.text() 的 zdir 参数支持 None(面向相机)、'x'/'y'/'z'(文本平面垂直于该轴)以及自定义方向矢量。
- 颜色通过 color 或 c 参数直接指定。
- text2D 的 transform=ax.transAxes 使坐标归一化到 [0,1],适合在所有视角下固定显示图题或注释。
- 实际使用时可以组合散点图(scatter)和文本标注,定位特定数据点。
该技巧在科研绘图、数据分析演示等场景中经常用到,能有效提高三维图形的可读性。 |