我在Tkinter中嵌入了Matplotlib动画,并且为了控制绘图的某些方面(例如绘图限制),我有一些方法可以停止动画,进行所请求的更改并重新启动它。我注意到每次停止并重新运行动画时它都比第一次慢(但速度不会慢一点)。
从IPython会话运行时,我观察到更简单的动画(下面的代码):
第一次跑:
In [279]: run test
145.5 FPS 0 frames
104.0 FPS 25 frames
174.8 FPS 50 frames
184.1 FPS 75 frames
180.4 FPS 100 frames
184.1 FPS 125 frames
第二次运行:
In [280]: run test
In [281]:
123.7 FPS 0 frames
38.0 FPS 25 frames
37.8 FPS 50 frames
38.1 FPS 75 frames
38.1 FPS 100 frames
37.5 FPS 125 frames
这是使用的动画代码:
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np
import time
def setFig():
fig = plt.figure(1)
fig.clear()
ax = fig.add_subplot(111)
ax.set_xlim(0, 100)
ax.set_ylim(0, 1)
line = ax.plot([], [])
return fig, ax, line
def init():
line[0].set_data([], [])
return line
def animate(i):
line[0].set_data(range(100), np.random.random(100))
if i % 25 == 0:
global t_old
t_new = time.time()
print('{:5.1f} FPS{:>5d} frames'.format(25 / (t_new - t_old), i))
t_old = t_new
return line
if __name__ == '__main__':
t_old = time.time()
fig, ax, line = setFig()
anim = animation.FuncAnimation(fig, animate, init_func=init,
blit=True, interval=1, frames=150,
repeat=False)
plt.show()
请注意,我将动画间隔设置为1毫秒。如果我将其设置为零,则不会观察到此行为,并且所有后续运行都表现良好,如果我在第二次运行之前关闭该图,则会发生同样的情况。为什么会发生这种情况?如何确保后续动画的运行速度与第一个一样快?