3D 绘图投影类型

PythonPythonBeginner
立即练习

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

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

简介

本实验展示了三维绘图的不同相机投影,以及使用Python Matplotlib改变透视投影焦距的效果。

虚拟机使用提示

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

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

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

导入库

首先,导入必要的库,包括Matplotlib以及来自mpl_toolkits.mplot3d的Axes3D。

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d

获取数据

获取用于三维绘图的测试数据。

X, Y, Z = axes3d.get_test_data(0.05)

创建带有子图的图形

使用plt.subplots创建一个包含三个子图的图形。

fig, axs = plt.subplots(1, 3, subplot_kw={'projection': '3d'})

绘制数据

使用plot_wireframe在三个子图中的每个子图上绘制数据。

for ax in axs:
    ax.plot_wireframe(X, Y, Z, rstride=10, cstride=10)

设置正交投影

将第一个子图设置为使用视场(FOV)为0度且焦距为无穷大的正交投影。

axs[0].set_proj_type('ortho')  ## FOV = 0 deg
axs[0].set_title("'ortho'\nfocal_length = ∞", fontsize=10)

设置透视投影

将第二个子图设置为使用默认视场(FOV)为90度且焦距为1的透视投影。

axs[1].set_proj_type('persp')  ## FOV = 90 deg
axs[1].set_title("'persp'\nfocal_length = 1 (default)", fontsize=10)

将第三个子图设置为使用视场为157.4度且焦距为0.2的透视投影。

axs[2].set_proj_type('persp', focal_length=0.2)  ## FOV = 157.4 deg
axs[2].set_title("'persp'\nfocal_length = 0.2", fontsize=10)

显示绘图

使用plt.show()显示绘图。

plt.show()

总结

本实验展示了如何使用Python的Matplotlib创建3D绘图,以及如何更改绘图的投影类型和焦距。正交投影会使图像变平,而透视投影会夸大透视效果并赋予图像更明显的深度。默认焦距1对应于90度的视场(FOV)。