简介
在本教程中,我们将学习如何使用 Matplotlib 生成一个“展开”的 3D 图,该图展示了每个主要的 3D 视图平面。我们还将为每个视图所需的仰角、方位角和滚转角添加标签。此图像可以打印出来并折叠成一个盒子,其中每个平面构成盒子的一个面。
虚拟机提示
虚拟机启动完成后,点击左上角切换到“笔记本”标签,以访问 Jupyter Notebook 进行练习。
有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。
如果你在学习过程中遇到问题,请随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。
导入必要的库
我们首先为本教程导入必要的库,其中包括 Matplotlib。
import matplotlib.pyplot as plt
定义一个用于标注坐标轴的函数
我们定义一个函数 annotate_axes,稍后将使用它为每个主要的 3D 视图平面标注其各自的角度。
def annotate_axes(ax, text, fontsize=18):
ax.text(x=0.5, y=0.5, z=0.5, s=text,
va="center", ha="center", fontsize=fontsize, color="black")
定义主要的 3D 视图平面及其角度
我们定义主要的 3D 视图平面及其相应的仰角、方位角和滚转角。
views = [('XY', (90, -90, 0)),
('XZ', (0, -90, 0)),
('YZ', (0, 0, 0)),
('-XY', (-90, 90, 0)),
('-XZ', (0, 90, 0)),
('-YZ', (0, 180, 0))]
定义 3D 图的布局
我们使用列表的列表来定义 3D 图的布局。列表中的 '.' 表示一个空的子图。
layout = [['XY', '.', 'L', '.'],
['XZ', 'YZ', '-XZ', '-YZ'],
['.', '.', '-XY', '.']]
创建 3D 图
我们使用 subplot_mosaic 根据步骤 4 中定义的布局来创建 3D 图。
fig, axd = plt.subplot_mosaic(layout, subplot_kw={'projection': '3d'},
figsize=(12, 8.5))
设置每个主要 3D 视图平面的属性
我们设置每个主要 3D 视图平面的属性,包括 x、y 和 z 轴的标签、投影类型以及视角。
for plane, angles in views:
axd[plane].set_xlabel('x')
axd[plane].set_ylabel('y')
axd[plane].set_zlabel('z')
axd[plane].set_proj_type('ortho')
axd[plane].view_init(elev=angles[0], azim=angles[1], roll=angles[2])
axd[plane].set_box_aspect(None, zoom=1.25)
为每个主要的 3D 视图平面添加标签
我们使用步骤 2 中定义的 annotate_axes 函数,为每个主要的 3D 视图平面标注其各自的角度。
for plane, angles in views:
label = f'{plane}\n{angles}'
annotate_axes(axd[plane], label, fontsize=14)
自定义每个主要 3D 视图平面的刻度标签和轴标签
我们自定义每个主要 3D 视图平面的刻度标签和轴标签,以去除任何不必要的标签。
for plane in ('XY', '-XY'):
axd[plane].set_zticklabels([])
axd[plane].set_zlabel('')
for plane in ('XZ', '-XZ'):
axd[plane].set_yticklabels([])
axd[plane].set_ylabel('')
for plane in ('YZ', '-YZ'):
axd[plane].set_xticklabels([])
axd[plane].set_xlabel('')
为中心子图添加标签
我们为中心子图添加一个标签,以表明这是一个主要的 3D 视图平面绘图。
label ='mplot3d primary view planes\n' + 'ax.view_init(elev, azim, roll)'
annotate_axes(axd['L'], label, fontsize=18)
axd['L'].set_axis_off()
显示 3D 绘图
我们使用 plt.show() 来显示 3D 绘图。
plt.show()
总结
在本教程中,我们学习了如何使用 Matplotlib 生成一个“展开的”3D 绘图,该绘图展示了每个主要的 3D 视图平面。我们还为每个视图所需的仰角、方位角和滚转角添加了标签,并为每个主要的 3D 视图平面自定义了刻度标签和轴标签。这张图像可以打印出来并折叠成一个盒子,其中每个平面构成盒子的一个面。