三维绘图
Matplotlib - 3D 绘图简介
Section titled “Matplotlib - 3D 绘图简介”虽然 Matplotlib 最初主要用于 2D 绘图,但 mpl_toolkits.mplot3d 工具包扩展了它的能力,使其能够创建各种类型的三维可视化图形。这个工具包通常包含在标准的 Matplotlib 安装中,所以通常无需单独安装。
要启用 3D 绘图,你需要创建一个特殊的 3D Axes 对象(三维坐标轴对象)。这通常通过在创建 Axes(通常使用 plt.figure().add_subplot() 或 plt.axes())时传递 projection='3d' 关键字参数来完成。
import matplotlib.pyplot as pltimport numpy as np
# 如果使用 projection='3d',严格来说不需要显式导入 mplot3d# 但导入也不会有什么问题:# from mpl_toolkits import mplot3d
# --- 创建一个 Figure 和一个 3D Axes 对象 ---fig = plt.figure(figsize=(8, 6))ax = fig.add_subplot(1, 1, 1, projection='3d')
# 其他方式:# ax = plt.axes(projection='3d')# fig, ax = plt.subplots(subplot_kw={'projection': '3d'})
# 现在 'ax' 是一个 3D Axes 对象,可以用于 3D 绘图命令了。拥有一个 3D Axes 对象 (ax) 后,你就可以使用其特定的方法来创建各种 3D 图形了。
基本 3D 绘图类型
Section titled “基本 3D 绘图类型”1. 3D 折线图 (ax.plot3D)
Section titled “1. 3D 折线图 (ax.plot3D)”最简单的 3D 图形是用线条连接由 (x, y, z) 坐标定义的点。
# 用于绘制 3D 螺旋线的数据示例z_line = np.linspace(0, 15, 1000)x_line = np.sin(z_line)y_line = np.cos(z_line)
# 绘制 3D 折线图ax.plot3D(x_line, y_line, z_line, color='gray', label='Helix')ax.set_title('3D Line Plot Example')ax.set_xlabel('X')ax.set_ylabel('Y')ax.set_zlabel('Z')ax.legend()2. 3D 散点图 (ax.scatter3D)
Section titled “2. 3D 散点图 (ax.scatter3D)”在指定的 (x, y, z) 坐标处绘制单独的标记。适用于在三维空间中可视化点云或离散数据点。你可以根据其他变量改变标记大小 (s) 和颜色 (c)。
# 用于绘制 3D 散点图的数据示例np.random.seed(42)z_scatter = 15 * np.random.random(100)x_scatter = np.sin(z_scatter) + 0.1 * np.random.randn(100)y_scatter = np.cos(z_scatter) + 0.1 * np.random.randn(100)
# 根据 Z 值给点上色(可选)colors = z_scatter
# 绘制 3D 散点图sc = ax.scatter3D(x_scatter, y_scatter, z_scatter, c=colors, cmap='viridis', s=50, alpha=0.7, label='Random Points')ax.set_title('3D Scatter Plot Example')ax.set_xlabel('X')ax.set_ylabel('Y')ax.set_zlabel('Z')
# 如果根据值上色,添加颜色条cbar = fig.colorbar(sc, label='Z value', shrink=0.5, aspect=10)ax.legend()本简介涵盖了如何创建 3D axes 以及基本的折线图和散点图。其他常见的 3D 绘图类型包括:
- 等高线图 (
ax.contour3D):在 3D 空间中绘制等高线。 - 线框图 (
ax.plot_wireframe):使用线条网格表示曲面。 - 曲面图 (
ax.plot_surface):使用填充的多边形表示曲面,通常按高度着色。
这些更复杂的图形通常需要数据以 2D 网格的形式组织(使用 np.meshgrid)。我们将在后续章节中探讨这些内容。
# 完成并显示包含两个示例的图形(如果一起运行)plt.show() # 显示 Figure