在matplotlib模块中我们前面学习绘制如折线、柱状、散点、直方图等静态图形。我们都知道在matplotlib模块主要有三层脚本层为用户提供快捷的绘制图形方法,美工层接收到脚本层的命令后将绘制指令发送给后端,后端提供执行绘制操作、事件响应、图形渲染工作。具体的详情可见往期文章。
在matplotlib模块中,除了以上静态图形的绘制,还提供Animation类支持绘制动态图制作。
Animation 是matplotlib模块制作实时动画的动画类,包含三个子类
matplotlib.animation.Animation()是动画类的基类,是不能被使用的。常用的两个类主要animation两个子类
matplotlib.animation.FuncAnimation(fig, func,
frames=None,
init_func=None,
fargs=None,
save_count=None,
* , cache_frame_data=True,
**kwargs)
matplotlib.animation.ArtistAnimation(fig,
artists,
*args,
**kwargs)
动态绘图的本质就是,反复的调用一个函数或执行一串代码,每次执行就生成一幅图,覆盖掉之前的图像,呈现“动态”效果
matplotlib 绘制动态图最重要的是要准备好每一帧显示的数据,通常我们使用FuncAnimation可以传入产生连续数字的func方法,因此绘制动态图主要步骤为:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
fig,ax = plt.subplots()
x = np.arange(0, 2*np.pi, 0.01)
line, = ax.plot(x, np.cos(x),color="pink")
def update(i):
line.set_ydata(np.cos(x + i / 50))
return line,
ani = animation.FuncAnimation(
fig, update, interval=20, blit=True, save_count=50)
plt.show()
animation.save("movie.gif",writer="pillow")保存动画为gif格式ps:我们需要提前pip install pillow 安装pillow库,否则会提示无法使用
ani.save("movie.gif",writer='pillow')
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
fig, ax = plt.subplots() #生成子图,相当于fig = plt.figure(),ax = fig.add_subplot(),其中ax的函数参数表示把当前画布进行分割,例:fig.add_subplot(2,2,2).表示将画布分割为两行两列 #ax在第2个子图中绘制,其中行优先,
xdata, ydata = [], [] #初始化两个数组
ln, = ax.plot([], [], 'r-', animated=False) #第三个参数表示画曲线的颜色和线型,具体参见:https://blog.csdn.net/tengqingyong/article/details/78829596
def init():
ax.set_xlim(0, 2*np.pi) #设置x轴的范围pi代表3.14...圆周率,
ax.set_ylim(-1, 1) #设置y轴的范围
return ln, #返回曲线
def update(n):
xdata.append(n) #将每次传过来的n追加到xdata中
ydata.append(np.sin(n))
ln.set_data(xdata, ydata) #重新设置曲线的值
return ln,
ani = FuncAnimation(fig, update, frames=np.linspace(0, 2*np.pi, 10), #这里的frames在调用update函数是会将frames作为实参传递给“n”
init_func=init, blit=True)
plt.show()
PS:一般来说一个动图有两类函数,一类是初始化函数,另一类是需要更新的函数!!
动图绘制的路线

保存为HTML格式,是不需要安装额外软件的
导入模块加上这一条:
from matplotlib.animation import HTMLWriter
最后加上这一条:
mywriter = HTMLWriter(fps=60)
ani.save('myAnimation.html',writer=mywriter)
保存为gif格式,需要下载一个imagemagick软件软件来源imagemagick

下载的是dll,下载到任何文件夹下应该都可以。
代码部分相当简单,只需要在最后加一条:
ani.save('decay.gif',writer='imagemagick',fps=30)
如果下了imagemagick,里面自带了ffmpeg的dll,那么也只需要在最后加一条:
ani.save('decay.gif',writer='ffmpeg',fps