我编写了一个原则上可以做到这一点的函数:
def make_animation():
nframes = 30
arr = np.random.rand(30, 2, 2) * 255
data = xr.DataArray(arr, [('time', np.arange(30)), ('x', [1, 2]), ('y', [0, 1])])
fig, ax = plt.subplots()
quad = data.isel(time=0).plot.imshow(origin='lower',
vmin=np.nanmin(data.values),
vmax=np.nanmax(data.values))
def update(i):
ti = data.isel(time=i)
quad.set_array(ti.data)
return quad
anim = animation.FuncAnimation(fig, update,
frames=len(data.time), blit=False,
interval=50)
anim.save('some_path', writer='ffmpeg', fps=2)
如果我从__main__
调用任意数量的nframes
,它就像一个咒语。但是,如果我将此函数导入另一个模块,它将写入输出文件,但是当frames
太高时不会“填充”该文件。 (太高已经意味着50帧左右)。这是最后一条日志消息:
matplotlib.animation: MovieWriter.grab_frame: Grabbing frame.
我已经尝试将save_count
参数设置为时间轴的长度,但是它没有任何改变。知道如何解决这个问题吗?