动态绘制三维线框图

PythonPythonBeginner
立即练习

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

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

简介

在本实验中,我们将学习如何使用Matplotlib(Python中一个流行的数据可视化库)为3D线框图制作动画。

虚拟机使用提示

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

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

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

导入库

第一步是导入必要的库:Matplotlib、NumPy和time。

import time
import matplotlib.pyplot as plt
import numpy as np

设置图形和子图

第二步是设置图形和子图。我们将使用add_subplot创建一个3D图。

fig = plt.figure()
ax = fig.add_subplot(projection='3d')

创建网格

第三步是使用linspace创建一个网格。

xs = np.linspace(-1, 1, 50)
ys = np.linspace(-1, 1, 50)
X, Y = np.meshgrid(xs, ys)

设置Z轴限制

第四步是设置Z轴限制,这样就不会在每一帧都重新计算。

ax.set_zlim(-1, 1)

动态绘制图形

第五步是动态绘制图形。我们将使用一个for循环来遍历一系列phi值。在每次迭代中,我们将移除上一个线条集合,生成新的数据,绘制新的线框,并在继续之前短暂暂停。

wframe = None
tstart = time.time()
for phi in np.linspace(0, 180. / np.pi, 100):
    if wframe:
        wframe.remove()
    Z = np.cos(2 * np.pi * X + phi) * (1 - np.hypot(X, Y))
    wframe = ax.plot_wireframe(X, Y, Z, rstride=2, cstride=2)
    plt.pause(.001)

显示平均每秒帧数

第六步是使用运行动画所花费的总时间来显示平均每秒帧数(FPS)。

print('Average FPS: %f' % (100 / (time.time() - tstart)))

总结

在这个实验中,我们学习了如何使用Matplotlib动态绘制三维线框图。我们使用for循环遍历一系列phi值,生成新数据,绘制新的线框图,并在继续之前短暂暂停。最后,我们使用运行动画的总时间来显示平均每秒帧数(FPS)。