我正试图把我计算的数据制作成电影。我使用的是ffmpeg编写器。当我在Spyder中开始动画时,它运行得很好,一直运行到最后,但当我试图保存它时,它只运行了前30%的动画。我怎样才能保存整个动画?
这是一段代码(很长);MM是存储矩阵的位置(其中1200个)。
import matplotlib
matplotlib.use("Agg")
from mpl_toolkits.mplot3d import axes3d
import matplotlib.animation as animation
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm
nx = 10
ny = 10
X=np.linspace(0, Lx, nx)
Y=np.linspace(0, Ly, ny)
Writer = animation.writers['ffmpeg']
writer = Writer(fps=15, metadata=dict(artist='Me'), bitrate=1)
plt.ion()
fig = plt.figure()
im = plt.contourf(X, Y, MM[0], np.linspace(T_ok,np.max(MM[-1]),150), cmap = cm.hot)
ax = fig.add_subplot(111, projection='3d')
plt.colorbar(im)
def anime(i):
ax.cla()
im = ax.contourf(X, Y, MM[i], np.linspace(T_ok,np.max(MM[-1]),150), cmap = cm.hot)
plt.title('%5.3f'%i)
return im,
anim = animation.FuncAnimation(fig, anime)
anim.save('anime.mp4', writer=writer)
编辑:我只是设置帧10000,它的工作,但我想知道为什么。有1200个矩阵需要绘制。
这个问题很老了,但是万一有人在寻找答案的时候偶然发现它(就像我一样),这个评论让我明白了,对于自定义帧生成器,你需要手动设置FuncAnimation
的save_count
成员,以使视频保存整个动画。
。,如果您想用FuncAnimation
的anim
实例遍历数组times
,则需要:
# either at instantiation
# anim = FuncAnimation(..., save_count=len(times))
# or after some time, if you need to customize it later
anim.save_count = len(times)
anim.save('anime.mp4', writer=writer)