Skip to content

Matplotlib - 三维线框图

3D 线框图 (wireframe plot) 通过绘制连接网格点 (grid points) 的线来可视化由 Z = f(X, Y) 定义的三维曲面 (surface)。它本质上展示了曲面的“骨架”或底层网格结构,有助于理解曲面的形态,而不会像填充曲面图那样可能存在遮挡 (occlusion) 问题。

与 Matplotlib 中的其他 3D 图类似,线框图需要一个 3D Axes 对象(通过设置 projection='3d' 创建),并且通常需要用于表示 X、Y 和 Z 坐标的 2D 数组(通常使用 numpy.meshgrid 创建)。

使用 ax.plot_wireframe() 方法来创建这些图。

ax.plot_wireframe(X, Y, Z, **kwargs)
  • X, Y, Z:表示曲面网格点的 x, y, z 坐标的 2D 数组。
  • color:指定所有线框线条颜色的单一值。
  • linewidth:线框线条的宽度。
  • linestyle:线框线条的样式(例如,'-', '--', ':')。
  • rstride, cstride:整数。用于行和列的下采样步长 (downsampling stride)。对于密集网格,绘制每 n 条网格线可以简化图表并加快渲染速度(例如,rstride=2, cstride=2 会绘制每隔一条的线条)。

示例:绘制正弦函数 (sinusoidal function) 的 3D 线框图。

import matplotlib.pyplot as plt
import numpy as np
# 1. 定义要绘制的函数
def f(x, y):
return np.sin(np.sqrt(x**2 + y**2))
# 2. 创建坐标向量和网格
x_vec = np.linspace(-6, 6, 30)
y_vec = np.linspace(-6, 6, 30)
X, Y = np.meshgrid(x_vec, y_vec)
# 3. 计算 Z 值
Z = f(X, Y)
# 4. 创建 Figure 和 3D Axes
fig = plt.figure(figsize=(8, 6))
ax = plt.axes(projection='3d')
# 5. 创建线框图
# 如果需要,可以使用 rstride/cstride 来简化网格
wireframe_plot = ax.plot_wireframe(X, Y, Z,
color='black', # 线条颜色
linewidth=0.5, # 细线
rstride=1, # 绘制每 1 条行线
cstride=1 # 绘制每 1 条列线
)
# 6. 设置标签和标题
ax.set_xlabel('X axis')
ax.set_ylabel('Y axis')
ax.set_zlabel('Z axis')
ax.set_title('3D Wireframe Plot')
# 调整视角 (可选)
ax.view_init(elev=40, azim=-45)
plt.show()

此代码为函数 f(x, y) 生成 X、Y 和 Z 坐标网格,然后使用 ax.plot_wireframe() 方法绘制曲面的结构,线条颜色为黑色。rstride 和 cstride 参数控制线框网格的密度;值越大,网格越稀疏。线框图清晰地展示了曲面的底层网格和形状。