Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 在最后一步将动画保存为图形_Python 2.7_Animation_Matplotlib - Fatal编程技术网

Python 2.7 在最后一步将动画保存为图形

Python 2.7 在最后一步将动画保存为图形,python-2.7,animation,matplotlib,Python 2.7,Animation,Matplotlib,我编写了一个脚本,使用matplotlib为我获得的结果制作动画 除了我得到的动画,我还想在动画的最后一步保存这个人物;就在动画重复之前。我定义了一个保存标志,以避免图形被反复保存。您可以在下面看到我的代码的简化版本: #!/usr/bin/env python import numpy as np from matplotlib import pyplot as plt import matplotlib.animation as animation x = np.array(range(1

我编写了一个脚本,使用matplotlib为我获得的结果制作动画

除了我得到的动画,我还想在动画的最后一步保存这个人物;就在动画重复之前。我定义了一个保存标志,以避免图形被反复保存。您可以在下面看到我的代码的简化版本:

#!/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()
如果运行脚本,您可能会看到,在第一个循环结束时,动画会出错。此错误是由于设置了
True
blit
导致的。但是,如果将其设置为
False
,则该图形会按其应有的方式重复

为什么会有这样的问题,;可能是虫子吗?(我的Python版本是2.7.5+)


是否有更好的方法在动画结束时保存图形?

我实际上无法在我的机器上重现您的问题。但是,当调用图形时,
savefig
更改图形的DPI,可能会导致显示问题。如果你改为
fig.savefig('foo.png',dpi=fig.dpi)
会发生什么?@JoeKington它解决了这个问题!谢谢你,乔!