在matplotlib中创建动画基本上有两种方法
互动模式
使用打开更多互动功能
plt.ion()。即使
show尚未调用,也会创建一个图。可以通过调用
plt.draw()或为动画更新图
plt.pause()。
import matplotlib.pyplot as pltx = [1,1]y = [1,2]fig, (ax1,ax2) = plt.subplots(nrows=2, sharex=True, sharey=True)line1, = ax1.plot(x)line2, = ax2.plot(y)ax1.set_xlim(-1,17)ax1.set_ylim(-400,3000)plt.ion()for i in range(15): x.append(x[-1]+x[-2]) line1.set_data(range(len(x)), x) y.append(y[-1]+y[-2]) line2.set_data(range(len(y)), y) plt.pause(0.1)plt.ioff() plt.show()
功能动画
Matplotlib提供了一个动画子模块,该子模块简化了动画的创建,并允许轻松地保存它们。与上面相同,使用
FuncAnimation如下所示:
import matplotlib.pyplot as pltimport matplotlib.animationx = [1,1]y = [1,2]fig, (ax1,ax2) = plt.subplots(nrows=2, sharex=True, sharey=True)line1, = ax1.plot(x)line2, = ax2.plot(y)ax1.set_xlim(-1,18)ax1.set_ylim(-400,3000)def update(i): x.append(x[-1]+x[-2]) line1.set_data(range(len(x)), x) y.append(y[-1]+y[-2]) line2.set_data(range(len(y)), y)ani = matplotlib.animation.FuncAnimation(fig, update, frames=14, repeat=False) plt.show()
下面是一个使频率和功率谱变化的正弦波动画的示例:
import matplotlib.pyplot as pltimport matplotlib.animationimport numpy as npx = np.linspace(0,24*np.pi,512)y = np.sin(x)def fft(x): fft = np.abs(np.fft.rfft(x)) return fft**2/(fft**2).max()fig, (ax1,ax2) = plt.subplots(nrows=2)line1, = ax1.plot(x,y)line2, = ax2.plot(fft(y))ax2.set_xlim(0,50)ax2.set_ylim(0,1)def update(i): y = np.sin((i+1)/30.*x) line1.set_data(x,y) y2 = fft(y) line2.set_data(range(len(y2)), y2)ani = matplotlib.animation.FuncAnimation(fig, update, frames=60, repeat=True) plt.show()



