Matplotlib и целлулоид демонстрируют странное поведение в ноутбуке Jupyter

#python #matplotlib #jupyter-notebook

Вопрос:

Я пытаюсь анимировать результаты моделирования, выполненного с помощью Python. Для этого я использую matplotlib для создания кадров анимации, а затем собираю их с помощью класса Camera из библиотеки celluloid. Код, который генерирует анимацию, выглядит следующим образом:

 fig = plt.figure()
ax = plt.gca()
ax.set_aspect('equal')

camera = Camera(fig)

for i in range(result.t.size):
    if i % 10 == 0:
        x = result.y[0, i]
        y = result.y[1, i]

        plt.scatter(x, y, s = 100, c = 'red')
        plt.xlim(-3, 3)
        plt.ylim(-3, 3)
        plt.grid()

        camera.snap()

animation = camera.animate(blit = False, interval = 10)
HTML(animation.to_html5_video())
 

Последняя часть, которая генерирует видео HTML5, позволяет просматривать анимацию в ноутбуке Jupyter в Интернете. Тем не менее, я получаю следующий результат:

введите описание изображения здесь

Первый вывод-это соответствующая анимация, которая работает хорошо. Второй — это просто статичный пустой участок. Поэтому у меня есть два вопроса:

  1. Откуда берется второй сюжет и как я могу его удалить?
  2. Анимация не показывает никакой сетки, хотя я запрашивал ее plt.grid() на каждом кадре. Почему это происходит?

Заранее спасибо за любую помощь.

Комментарии:

1. И, пожалуйста, ознакомьтесь matplotlib.org/stable/api/animation_api.html чтобы правильно настроить фигуру.

2. plt.scatter(x, y, s = 100, c = 'red') наверное, так и должно быть ax.scatter(x, y, s = 100, c = 'red') . Вы создаете фигуру и оси, а затем никогда не используете их.