Python FuncAnimation matplotlib не закрывается правильно с внутренним рендерингом латекса и PyCharm? - PullRequest
0 голосов
/ 24 января 2020

Используя matplotlib's FuncAnimation для создания анимации, я получаю сообщение об ошибке

Traceback (most recent call last):
  File "/scratch/seismo_proxauf/.conda/envs/proxconda3/lib/python3.7/site-packages/matplotlib/cbook/__init__.py", line 216, in process
    func(*args, **kwargs)
  File "/scratch/seismo_proxauf/.conda/envs/proxconda3/lib/python3.7/site-packages/matplotlib/animation.py", line 957, in _start
    self.event_source.add_callback(self._step)
AttributeError: 'NoneType' object has no attribute 'add_callback'

после успешного сохранения анимации. Сюжет также открывается после краткого закрытия. Ниже приведен минимальный пример. Ошибка может быть активирована / деактивирована путем установки флага error_trigger на True и False соответственно. Кажется, это связано с внутренним рендерингом латекса. Строка формата %d в строке заголовка оси имеет решающее значение, без какой-либо вставки строки код, кажется, всегда работает. Дополнительные команды после сохранения анимации используются из-за моего более раннего вопроса Stackoverflow .

Примечание. Эта ошибка возникает при интерактивном использовании PyCharm (отметьте код и нажмите Ctrl+Alt+E), но не в терминал по умолчанию (python test_animation.py).

Технические характеристики: Python 3.7.6, matplotlib 3.1.2, ffmpeg 4.2, PyCharm 2019.3.1 Community Edition

Что вызывает это сообщение об ошибке и как его можно избежать (даже с PyCharm)?

Обновление : при запуске код несколько раз с активированной ошибкой, последующие анимации закроются корректно и больше не будут отображать сообщение об ошибке. Однако окно сюжета первой анимации останется открытым.


import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

# plt.ion()

def animate(iter_temp, error_trigger_temp):
    ax = plt.gca()
    plt.imshow(np.random.rand(10,10))
    if error_trigger_temp == True:
        ax.set_title(r'$t_a$, timestep %d' % (iter_temp))
    else:
        ax.set_title('t_a, timestep %d' % (iter_temp))

error_trigger = True

iter = np.arange(10)

fig = plt.figure()
myani = FuncAnimation(fig, animate, frames=iter, fargs=(error_trigger,), interval=50)
myani.save('~/test_animation.mp4', writer='ffmpeg')
myani.event_source.stop()
del myani
plt.close()

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