在 3D 绘图中绘制平面物体

PythonPythonBeginner
立即练习

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

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

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 的 Circlepathpatch_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_xlimset_ylimset_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 公式,并设置了坐标轴的范围。