1.动态图简介
动态图主要有.gif、.flv、.swf等格式,这里主要绘制.gif格式的动态图片,这是一种无声的动态图片。它可以方便地嵌入到PPT中,在演讲时使我们的PPT更加炫酷。
2.核心函数及参数介绍
from matplotlib.animation import FuncAnimationFuncAnimation(fig,func,frames,init_func,interval)参数:fig--绘制图形的画布;func--不断生成新的数据的函数,用来更新图形;frames--不断向func函数提供数据,可缺省,如果缺省则默认不断生成整数;init_func--设置初始图形的函数,可缺省;interval--图形更新的时间间隔,单位是ms,设置较小的值可使图形快速更新。
fig为画布对象,可通过subplots函数或者figure函数生成,frames为可迭代对象,该参数每次向func函数中传入一个数据,因此func函数中第一个参数必须是frame来接收数据,即使func函数不需要利用frames中的数据,也必须在func函数中声明该参数。
3.曲线动态图实例展示
这里要绘制的是正弦函数生成的数据,即绘制正弦曲线在一个周期内的动态图。
import numpy as npimport matplotlib.pyplot as pltfrom matplotlib.animation import FuncAnimationfig, ax = plt.subplots()xdata, ydata = [], []ln, = plt.plot([], [], color='red')def init(): ax.set_xlim(0, 2*np.pi) ax.set_ylim(-1, 1) ax.set_xlabel('横坐标', fontproperties='STSong') ax.set_ylabel('纵坐标', fontproperties='STSong') ax.yaxis.set_major_locator(plt.MultipleLocator(0.5)) return ln,def update(frame): xdata.append(frame) ydata.append(np.sin(frame)) ln.set_data(xdata, ydata) return ln,ani = FuncAnimation(fig, update, frames=np.linspace(0, 2*np.pi, 100),interval=20, init_func=init)plt.show()# gif格式图片保存,需要提前安装ImageMagick,否则在保存时会报错# ani.save('sin.gif', writer='imagemagick')
4.模拟分子运动动态图
布朗运动表明,分子在永不停息地做无规则运动,我们近似模拟无规则运动的分子的动态图。
import numpy as npimport matplotlib.pyplot as pltfrom matplotlib.animation import FuncAnimationfig = plt.figure()x_data, y_data = np.random.random(50), np.random.random(50)sca = plt.scatter(x_data, y_data, s=200, c=range(50), alpha=0.8)plt.xlim([0, 1])plt.ylim([0, 1])plt.xticks([])plt.yticks([])def update(frame): data_x = np.random.random(50) data_y = np.random.random(50) data = np.array([data_x, data_y]).T sca.set_offsets(data) return scaanim = FuncAnimation(fig, update, interval=500)plt.show()# gif格式图片的保存# anim.save('molecule.gif', writer='imagemagick')
参考资料
https://matplotlib.org/api/_as_gen/matplotlib.animation.FuncAnimation.html#matplotlib.animation.FuncAnimation