通过Matplotlib中的animation可以方便的生成动态的画图并保存到gif文件,示例代码如下
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as anim
# 生成figure和绘画对象
fig = plt.figure()
plt.xlim([0,2*np.pi])
plt.ylim([-1,1])
plt.grid('on')
line, = plt.plot(0, 0, 'ro')
# 准备绘画帧数据
frames = []
for t in np.arange(0,2*np.pi,0.05):
data = [t, np.sin(t)]
frames.append(data)
# 定义绘画函数(对每一帧数据的处理函数)
def plot_anim(data):
t, y = data
line.set_data(t, y) # 把更新的数据设置到曲线对象
plt.pause(0.01) # 进行一些pause以显示图像
# 调用动画绘图函数
a = anim.FuncAnimation(fig, plot_anim, frames=frames, interval=30)
a.save('anim.gif', writer='pillow')
1 首先载入所需要的模块,包括matplotlib.animation,用于后面gif动图的产生。
2 然后调用figure和plot函数生成需要的figure和line对象,这个line对象用于后面对它进行实时更新,进行动态绘制
3 然后准备绘制动图所需要的数据,这个数据就是帧数据的列表,在绘制过程中,绘制函数在每一帧会调用这些数据进行绘制。
4 定义绘制函数,对每一帧数据进行处理,绘制图像。这里把每一帧的数据设置到line曲线中,使这个曲线动态更新。这里line是一个点的绘制,实际效果就是这个点随着时间按照sin函数曲线进行移动。
5 调用FuncAnimation函数,该函数指定动态绘制函数按一定帧率对帧数据进行绘制。参数意义如下
fig - 图像对象
plot_anim - 绘制函数
frames - 帧数据
interval - 帧率(毫秒为单位)
在这个过程中,FuncAnimation会按照帧率定期调用绘制函数(plot_anim),推送每一帧的数据给到这个函数,绘制函数根据收到的帧数据进行绘制,从而形成动态的绘制效果。
6 最后调用save函数,对绘制结果进行保存,会在当前目录产生一个gif文件体现绘制的动态效果
下图为体现的效果
这里绘制一个sin函数的动态效果