动画可以更客观、形象的展示一些结果,该文来展示一下函数:
使用matplotlib.animate
代码如下:
import numpy as np import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation fig, ax = plt.subplots() plt.axis('equal') plt.axis('off') xdata, ydata = np.linspace(-2*np.pi, 2*np.pi, 1000), [] temp1,temp2 = np.power(np.square(xdata),0.33), 0.9*np.sqrt(3.3-np.square(xdata)) ln, = ax.plot([], [], 'r-', animated=False) def init(): ax.set_xlim(-np.pi, np.pi) ax.set_ylim(-2, 3) return ln, def update(n): ydata = temp1 + temp2*np.sin(n*np.pi*xdata) ln.set_data(xdata, ydata) return ln, ani = FuncAnimation(fig, update, frames=np.linspace(0, 20, 100), init_func=init, blit=True) plt.show()
matplotlib.animate中绘图函数FuncAnimation(fig,func,frames,init_func,interval,blit)参数说明:
- fig为画布
- func为自定义的动画函数
- frames为func的帧数参数
- init_func自定义初始化函数
- interval以毫秒计的更新频率
- blit指示更新所有数据,还是新变化的数据点,是布尔值
借助Moviepy
需要安装Moviepy,通过matplotlib自定义一个动画函数即可,需要使用mplfig_to_npimage将画布对象进行转化,然后用VideoClip可导出为gif,也可导出为MP4视频格式。代码如下:
import matplotlib.pyplot as plt import numpy as np from moviepy.video.io.bindings import mplfig_to_npimage import moviepy.editor as mpy duration = 20 fig_mpl, ax = plt.subplots(1,figsize=(5,3), facecolor='white') plt.axis('equal') plt.axis('off') xdata, ydata = np.linspace(-2*np.pi, 2*np.pi, 1000), [] temp1,temp2 = np.power(np.square(xdata),0.33), 0.9*np.sqrt(3.3-np.square(xdata)) ax.set_xlim(-np.pi, np.pi) ax.set_ylim(-2, 3) line, = ax.plot([], [], 'r-') def make_frame_mpl(t): ydata = temp1 + temp2*np.sin(t*np.pi*xdata) line.set_data(xdata,ydata) return mplfig_to_npimage(fig_mpl) animation =mpy.VideoClip(make_frame_mpl, duration=duration) animation.write_gif("heart.gif", fps=20)
使用Mayavi
使用方式与Moviepy很类似,这里省略几行代码。因为Mayavi依赖强大的ITK可视化引擎,所以考虑通过Mayavi处理复杂的数据集,用来制作3D数据或可交互数据。