Skip to content

Matplotlib - 三维等高线图

三维等高线图类似于二维等高线图,但它在三维空间中可视化。它显示函数 Z = f(X, Y) 的等高线,这些等高线绘制在对应 Z 值的不同高度上。

要在 Matplotlib 中创建三维图表,首先需要导入 mpl_toolkits.mplot3d 工具包,它提供了必要的工具。然后,创建一个带有 ‘3d’ 投影的 Axes 对象。

ax.contour3D() 函数用于创建图表。与它的二维对应物类似,它需要在规则的二维网格 (X, Y, Z) 上输入数据。

import matplotlib.pyplot as plt
import numpy as np
# 对于诸如 contour3D 的基础三维图表,如果使用 plt.axes(projection='3d') 或 plt.figure().add_subplot(projection='3d'),则无需显式导入 mplot3d 工具包。
# from mpl_toolkits import mplot3d # 为了清晰或使用高级功能,显式导入仍是好习惯
# 1. 定义要绘制的函数
def f(x, y):
return np.sin(np.sqrt(x ** 2 + y ** 2)) # 示例:Sync 函数
# 2. 创建数据网格
x = np.linspace(-6, 6, 30)
y = np.linspace(-6, 6, 30)
X, Y = np.meshgrid(x, y)
Z = f(X, Y)
# 3. 创建一个 figure 和一个三维 Axes
fig = plt.figure(figsize=(8, 6))
ax = plt.axes(projection='3d')
# 4. 绘制三维等高线图
# 参数:X, Y, Z 数据网格
# 50:等高线级别数量
# cmap:色谱(例如,'viridis', 'coolwarm', 'binary')
contour_plot = ax.contour3D(X, Y, Z, 50, cmap='viridis')
# 5. 自定义图表
ax.set_xlabel('X axis')
ax.set_ylabel('Y axis')
ax.set_zlabel('Z axis (f(x,y))')
ax.set_title('3D Contour Plot Example')
# 可选:添加颜色条
# fig.colorbar(contour_plot, shrink=0.5, aspect=10, label='f(x,y)')
# 可选:调整视角
# ax.view_init(elev=40., azim=-35) # elev = 仰角, azim = 方位角
# 6. 显示图表
plt.show()

此代码生成一个三维图表,显示 Sync 函数 sin(sqrt(x^2 + y^2)) 的等高线。这些等高线绘制在不同的 Z 级别上,并根据 ‘viridis’ 色谱着色,提供了函数在三维空间中峰和谷的视觉表示。添加了坐标轴标签和标题以提高清晰度。您可以在 Matplotlib 窗口中交互式地旋转三维图表。

  • X、Y、Z:表示坐标和函数值的二维数组。
  • levels(或位置整数):指定等高线级别的数量或值。
  • cmap:用于根据等高线的 Z 值着色的色谱。
  • colors:可用于代替 cmap 设置线条的单一颜色或颜色序列。
  • linewidths:控制等高线的粗细。

您可以将 contour3D 与其他三维图表类型结合使用,例如在同一 Axes 上使用 plot_surface 或 scatter3D,以实现更复杂的可视化。