我编写了一个脚本,使用matplotlib动画我获得的结果。
除了我得到的动画,我想在动画的最后一步保存图形;就在动画重复之前。我定义了一个save-flag,以避免一遍又一遍地保存数字。您可以在下面看到我的代码的简化版本:
#!/usr/bin/env python
import numpy as np
from matplotlib import pyplot as plt
import matplotlib.animation as animation
x = np.array(range(12))
y = np.array([i**2 for i in range(12)])
fig = plt.figure()
ax = plt.axes(xlim = (0,15), ylim = (0,150))
line, = ax.plot([],[], 'o-')
def init():
line.set_data([], [])
return line,
save_flag = False
def animate(i):
i = (i+1)%(len(x)+1)
line.set_data(x[0:i], y[0:i])
global save_flag
if (save_flag == False) and (i == (len(x)-1)):
print "\nThe figure is being saved!\n"
fig.savefig("foo" + ".png")
save_flag = True
return line,
ani = animation.FuncAnimation(fig, animate, repeat=True, blit=True, init_func=init)
plt.show()
如果运行脚本,您可能会看到,在第一个循环结束时,动画变得错误。此错误是由blit
引起的,True
设置为False
。但是,如果它设置为{{1}},那么该数字应该重复。
为什么会出现这样的问题;它可能是一个错误吗? (我的Python版本是2.7.5 +。)
有没有更好的方法在动画结束时保存数字?