Matplotlib animation.save работает только при вызове из __main__ - PullRequest
0 голосов
/ 03 июля 2019

Я написал функцию, которая в принципе делает это:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...