我最近将我的matplotlib python包更新到2.2.0版本,现在一些以前工作的代码来保存动画不起作用。代码不是保存动画,而是以特定的迭代次数冻结。当我设法关闭命令窗口时,它对中断没有响应并抛出PyEval_RestoreThread致命错误。
我正在使用Enthought Canopy。代码仍然可以正常使用其他版本的python和matplotlib。
我可以用这个来复制问题:
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np
SIZE = 128
fig, ax = plt.subplots()
ims = ax.imshow(np.random.rand(SIZE, SIZE))
i = 0
def update_animation(*args):
global i
i = i + 1
image = np.random.rand(SIZE, SIZE)
ims.set_data(image)
print "Iteration "+str(i)
F_NAME = "anim_test.mp4"
NUM_ITERS = 1000
FFwriter = animation.FFMpegWriter(fps=6, bitrate=500)
anim=animation.FuncAnimation(fig,update_animation,frames=NUM_ITERS,blit=False, repeat=False, interval=200)
anim.save(F_NAME, writer=FFwriter)
print "saved animation to " + F_NAME
更改bitrate参数会更改程序暂停的帧数。对于比特率= 500,它在第46帧周围停止。
如何在保存所有帧之前停止pyplot冻结?
修改
我的系统详情:
Python 2.7.6 64位Enthought Canopy
Windows 8
8GB RAM
ffmpeg版本N-79075-ga7b8a6e