作为子图的三维绘图

Beginner

This tutorial is from open-source community. Access the source code

简介

在数据分析中,经常需要创建三维(3D)图表来可视化数据。在 Matplotlib 中,我们可以将 3D 图表创建为子图,以比较不同的 3D 数据。本实验将演示如何使用 Matplotlib 将 3D 图表创建为子图。

虚拟机使用提示

虚拟机启动完成后,点击左上角切换到“笔记本”标签,以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟,以便 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,请随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。

导入库

在开始之前,我们需要导入本实验中将会用到的库。我们将使用 Matplotlib、NumPy 以及来自 mpl_toolkits.mplot3d 的 Axes3D。

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D

创建图形和子图

我们将创建一个包含两个子图的图形。第一个子图将是一个三维曲面图,第二个子图将是一个三维线框图。

## 创建一个包含两个子图的图形
fig = plt.figure(figsize=plt.figaspect(0.5))

## 添加第一个具有三维投影的子图
ax1 = fig.add_subplot(1, 2, 1, projection='3d')

## 添加第二个具有三维投影的子图
ax2 = fig.add_subplot(1, 2, 2, projection='3d')

创建三维曲面图

我们将为第一个子图创建一个三维曲面图。我们将使用 NumPy 来创建该图的数据。

## 为三维曲面图创建数据
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)

## 绘制三维曲面图
surf = ax1.plot_surface(X, Y, Z, cmap='coolwarm', linewidth=0, antialiased=False)

## 为该图添加一个颜色条
fig.colorbar(surf, shrink=0.5, aspect=10)

## 设置 z 轴的范围
ax1.set_zlim(-1.01, 1.01)

创建三维线框图

我们将为第二个子图创建一个三维线框图。我们将使用 mpl_toolkits.mplot3d.axes3d 中的get_test_data函数来创建该图的数据。

## 为三维线框图创建数据
X, Y, Z = Axes3D.get_test_data(0.05)

## 绘制三维线框图
ax2.plot_wireframe(X, Y, Z, rstride=10, cstride=10)

显示图形

我们将使用plt.show()函数来显示图形。

plt.show()

总结

在本实验中,我们学习了如何使用 Matplotlib 创建作为子图的三维绘图。我们创建了一个包含两个子图的图形,一个三维曲面图和一个三维线框图。我们使用 NumPy 创建三维曲面图的数据,并使用 mpl_toolkits.mplot3d.axes3d 中的get_test_data函数创建三维线框图的数据。我们还为三维曲面图添加了一个颜色条,并设置了 z 轴的范围。