Matplotlib - 三维曲面图
Matplotlib - 3D 曲面图 (3D Surface Plot)
Section titled “Matplotlib - 3D 曲面图 (3D Surface Plot)”3D 曲面图用于可视化表示函数 Z = f(X, Y) 的三维曲面。它类似于线框图 (wireframe plot),但除了线条之外,由 X、Y 和 Z 坐标定义的网格面填充了彩色多边形。颜色通常代表曲面的高度 (Z 值),有助于感知曲面的拓扑 (topology)。
与 Matplotlib 中的其他 3D 图一样,曲面图需要一个使用 projection='3d' 关键字创建的 3D Axes 对象。数据 X、Y 和 Z 通常必须是表示网格上坐标的二维数组(通常使用 numpy.meshgrid 创建)。
ax.plot_surface() 方法用于创建这些图。
ax.plot_surface(X, Y, Z, **kwargs)主要参数 (Key Parameters)
Section titled “主要参数 (Key Parameters)”X,Y,Z: 二维数组 (2D arrays),表示曲面网格点的 x、y 和 z 坐标。cmap: 字符串 (String) 或 Colormap 实例。指定用于根据 Z 值对曲面着色的颜色映射表(例如,‘viridis’、‘plasma’、‘coolwarm’)。color: 如果希望整个曲面为单一颜色,则指定单一颜色(会覆盖cmap)。edgecolor: 曲面补丁边缘的颜色(设置为'none'有时可以产生更平滑的外观)。linewidth: 边缘线的宽度。rstride,cstride: 整数 (Integers)。行和列的下采样步长。对于大型曲面,仅绘制第 n 条网格线可以加快渲染速度。alpha: 浮点数 (Float) (0-1)。曲面的透明度。
示例:绘制 Z = cos(sqrt(X^2 + Y^2)) 的 3D 曲面图。
import matplotlib.pyplot as pltimport numpy as np
# 1. 创建坐标向量和网格x_vec = np.linspace(-5, 5, 50)y_vec = np.linspace(-5, 5, 50)X, Y = np.meshgrid(x_vec, y_vec)
# 2. 根据函数计算 Z 值R = np.sqrt(X**2 + Y**2)Z = np.cos(R)
# 3. 创建图和 3D 轴fig = plt.figure(figsize=(9, 7))ax = plt.axes(projection='3d')
# 4. 创建曲面图# 使用颜色映射表 (cmap) 根据 Z 高度着色surface_plot = ax.plot_surface(X, Y, Z, cmap='viridis', # 着色用的 Colormap edgecolor='black', # 网格线的颜色 linewidth=0.2, # 网格线的宽度 alpha=0.9 # 曲面透明度 )
# 可选地,移除边缘以获得更平滑的外观:# surface_plot = ax.plot_surface(X, Y, Z, cmap='viridis', edgecolor='none')
# 5. 添加颜色条以映射颜色到 Z 值fig.colorbar(surface_plot, shrink=0.5, aspect=10, label='Z 值 (cos(R))')
# 6. 设置标签和标题ax.set_xlabel('X 轴')ax.set_ylabel('Y 轴')ax.set_zlabel('Z 轴')ax.set_title('3D 曲面图示例')
# 如有必要,设置 Z 限制(例如,聚焦到某个范围)# ax.set_zlim(-1.0, 1.0)
# 调整视角 (可选)ax.view_init(elev=30, azim=45) # elev=仰角, azim=方位角
plt.show()此代码为函数生成 X、Y 和 Z 坐标网格,然后使用 ax.plot_surface() 渲染 3D 曲面。cmap='viridis' 参数根据 Z 值对曲面进行着色,并添加了一个颜色条 (colorbar) 以提供键。调整 edgecolor、linewidth、alpha 和视角 (ax.view_init) 等参数可以显著自定义图的外观。