使用生成器时设置matplotlib动画的持续时间

时间:2014-08-06 17:50:06

标签: python animation matplotlib avconv

如何在将matplotlib动画保存到文件时指定持续时间? Usually它将由frame的{​​{1}}参数给出,但在使用生成器创建动画帧时则不会。例如。 using this example

animation.FuncAnimation()

创建一个20秒的视频,显示约。模拟时间为#5;模拟时间为#34;,生成器在使用import numpy as np import matplotlib.pyplot as plt import matplotlib.animation as animation def simData(): t_max = 10.0 dt = 0.05 x = 0.0 t = 0.0 while t < t_max: x = np.sin(np.pi*t) t = t + dt yield x, t def simPoints(simData): x, t = simData[0], simData[1] time_text.set_text(time_template%(t)) line.set_data(t, x) return line, time_text fig = plt.figure() ax = fig.add_subplot(111) line, = ax.plot([], [], 'bo', ms=10) ax.set_ylim(-1, 1) ax.set_xlim(0, 10) time_template = 'Time = %.1f s' # prints running simulation time time_text = ax.text(0.05, 0.9, '', transform=ax.transAxes) ani = animation.FuncAnimation(fig, simPoints, simData) #plt.show() ani.save('animation.mp4', writer="avconv", codec="libx264") 显示时生成的帧数的一半。

1 个答案:

答案 0 :(得分:5)

您错过了save_count上的FuncAnimation关键字。如果你传递一个生成器,那么你可以传递帧数来保存:

ani = animation.FuncAnimation(fig, simPoints, simData, save_count=200)

迭代似乎一直持续到生成器耗尽或达到save_count为止。默认值为100,即使在源代码之外似乎没有清楚地记录它。