简介
Matplotlib 是 Python 中一个流行的数据可视化库。它提供了广泛的函数来创建不同类型的绘图和图表。Matplotlib 的特性之一是能够在 3D 绘图中绘制平面物体。本实验将指导你完成使用 Matplotlib 在 3D 绘图中绘制平面物体的过程。
虚拟机使用提示
虚拟机启动完成后,点击左上角切换到“笔记本”标签,以访问 Jupyter Notebook 进行练习。
有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。
如果你在学习过程中遇到问题,随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。
导入所需库
我们将首先导入所需的库,即 Matplotlib、NumPy 和 mpl_toolkits.mplot3d.art3d。
import matplotlib.pyplot as plt
import numpy as np
import mpl_toolkits.mplot3d.art3d as art3d
创建一个 3D 绘图
我们将使用 Matplotlib 的 add_subplot 函数创建一个 3D 绘图。projection 参数设置为 '3d' 以创建 3D 绘图。
fig = plt.figure()
ax = fig.add_subplot(projection='3d')
在墙上绘制一个圆
我们将使用 Matplotlib 的 Circle 和 pathpatch_2d_to_3d 函数在 3D 绘图的 x = 0“墙”上绘制一个圆。
p = Circle((5, 5), 3)
ax.add_patch(p)
art3d.pathpatch_2d_to_3d(p, z=0, zdir="x")
标注坐标轴
我们将使用 text3d 函数手动标注坐标轴。该函数接受文本的位置、要显示的文本、被视为第三维的轴以及其他参数。
def text3d(ax, xyz, s, zdir="z", size=None, angle=0, usetex=False, **kwargs):
"""
在坐标轴 *ax* 上绘制字符串 *s*,其位置为 *xyz*,大小为 *size*,
旋转角度为 *angle*。*zdir* 给出被视为第三维的轴。*usetex* 是一个布尔值,
指示字符串是否应通过 LaTeX 子进程运行。任何其他关键字参数
都将转发给 `.transform_path`。
注意:zdir 会影响对 xyz 的解释。
"""
x, y, z = xyz
if zdir == "y":
xy1, z1 = (x, z), y
elif zdir == "x":
xy1, z1 = (y, z), x
else:
xy1, z1 = (x, y), z
text_path = TextPath((0, 0), s, size=size, usetex=usetex)
trans = Affine2D().rotate(angle).translate(xy1[0], xy1[1])
p1 = PathPatch(trans.transform_path(text_path), **kwargs)
ax.add_patch(p1)
art3d.pathpatch_2d_to_3d(p1, z=z1, zdir=zdir)
text3d(ax, (4, -2, 0), "X 轴", zdir="z", size=.5, usetex=False,
ec="none", fc="k")
text3d(ax, (12, 4, 0), "Y 轴", zdir="z", size=.5, usetex=False,
angle=np.pi / 2, ec="none", fc="k")
text3d(ax, (12, 10, 4), "Z 轴", zdir="y", size=.5, usetex=False,
angle=np.pi / 2, ec="none", fc="k")
在地面上书写一个 LaTeX 公式
我们将使用 text3d 函数在 3D 绘图的 z = 0“地面”上书写一个 LaTeX 公式。
text3d(ax, (1, 5, 0),
r"$\displaystyle G_{\mu\nu} + \Lambda g_{\mu\nu} = "
r"\frac{8\pi G}{c^4} T_{\mu\nu} $",
zdir="z", size=1, usetex=True,
ec="none", fc="k")
设置坐标轴范围并显示绘图
我们将使用 Matplotlib 的 set_xlim、set_ylim 和 set_zlim 函数来设置 x、y 和 z 轴的范围。最后,我们将使用 Matplotlib 的 show 函数来显示 3D 绘图。
ax.set_xlim(0, 10)
ax.set_ylim(0, 10)
ax.set_zlim(0, 10)
plt.show()
总结
在本实验中,我们学习了如何使用 Matplotlib 在 3D 绘图中绘制平面物体。我们创建了一个 3D 绘图,在墙上绘制了一个圆,标注了坐标轴,在地面上书写了一个 LaTeX 公式,并设置了坐标轴的范围。