Я написал функцию, которая в принципе делает это:
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
длину оси времени, но это ничего не изменило. Есть идеи как это исправить?