我想保存一個我用Matplotlib中的FuncAnimation類創建的動畫。我的動畫更復雜,但當我嘗試保存給出的簡單示例here時,我得到同樣的錯誤。Python Matplotlib FuncAnimation.save()只保存100幀
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation as animation
pause = False
def simData():
t_max = 10.0
dt = 0.05
x = 0.0
t = 0.0
while t < t_max:
if not pause:
x = np.sin(np.pi*t)
t = t + dt
yield x, t
def onClick(event):
global pause
pause ^= True
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) # I'm still not clear on this stucture...
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)
fig.canvas.mpl_connect('button_press_event', onClick)
ani = animation.FuncAnimation(fig, simPoints, simData, blit=False, interval=10,
repeat=True)
plt.show()
然而,當我試圖通過增加線
ani.save('test.mp4')
末挽救這個動畫,只有前100幀被保存。
動畫保存後,該功能重新啓動並按預期顯示,顯示和更新圖形200次(或直到t達到t_max,無論我設置的是什麼)。但是保存的電影只包含前100幀。
暫停功能使其變得棘手。沒有它,我可以將幀= 200放入FuncAnimation調用,而不是使用我現在用於幀參數的迭代器/生成器類型函數。但是通過放入幀數= 200,幀數似乎是不可思議的。
我該如何解決這個問題?
如果像這樣暫停工作,並且沒有暫停,你可以保存你想要的所有幀,真的有問題嗎?或者我誤解了你的情況? –