Matplotlib 如何在matplotlib中制作3D平面动画
Matplotlib是一个用Python编写的数据可视化库,用于创建出版物质量的图形。其它的数据可视化库比如Seaborn, ggplot, Plotly等,Matplotlib是最流行的,使用也最广泛的。
本次文章中,我们将会学习如何在Matplotlib中使用plot_surface方法创建3D平面动画。
阅读更多:Matplotlib 教程
准备工作
在我们开始动手制作动画之前,我们先需要安装一些必要的库。
- matplotlib
- numpy
- matplotlib.animation
如果你的电脑上还没有这些库,可以使用pip来安装它们:
pip install matplotlib numpy matplotlib.animation
当然,在安装之前请先确保Python和pip已经安装完毕。
制作3D动画
我们使用plot_surface方法来创建3D平面。此方法最好在jupyter notebook中执行,因为它可以在notebook中显示动画。
首先,我们生成3D数据。
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
def f(x, y):
return np.sin(np.sqrt(x**2 + y**2))
x = np.linspace(-6, 6, 30)
y = np.linspace(-6, 6, 30)
X, Y = np.meshgrid(x, y)
Z = f(X, Y)
接下来,我们创建一个3D图形,其数据为之前的数据。plt.show()方法可以显示静态的3D图形。
fig = plt.figure()
ax = Axes3D(fig)
ax.plot_surface(X, Y, Z)
plt.show()
现在,让我们尝试制作一个动画。具体来说,每一帧都会旋转3D图形一次。接下来的代码就可以实现这个效果。
import matplotlib.animation as animation
# 更新函数,其中num表示第几帧
def update(num):
ax.view_init(azim=num)
return ax,
# 初始化图形,返回这个图形的中的对象列表
def init():
return ax,
# 创建图形
fig = plt.figure()
ax = Axes3D(fig)
# 生成数据
x = np.linspace(-6, 6, 30)
y = np.linspace(-6, 6, 30)
X, Y = np.meshgrid(x, y)
Z = f(X, Y)
# 画图
ax.plot_surface(X, Y, Z)
ani = animation.FuncAnimation(fig, update, 360, init_func=init)
# 显示动画
# 在一些python IDE中可能需要这行代码才能显示动画
plt.rcParams['animation.html'] = 'jshtml'
ani
总结
在制作这个动画的过程中,我们只使用了套路的Matplotlib代码。Matplotlib是一个相当强大的数据可视化工具,如此便利的动画制作也是其中的一大优点之一。希望通过这篇文章,您可以使用制作出类似的动画并获得可视化的乐趣。
极客教程