Matplotlib ArtistAnimation, показывающий несколько элементов за один шаг - PullRequest
1 голос
/ 06 мая 2020

Некоторое время я использовал matplotlib для создания графиков, но только что обнаружил параметры animation. Я хочу показать серию графиков (а не только отдельные элементы) в анимации, используя animation.ArtistAnimation.

К сожалению, я не могу заставить его анимировать несколько построенных элементов за раз. Вот минимальный пример, объясняющий, что я имею в виду:

import random
import matplotlib.pyplot as plt
import matplotlib.animation as animation

fig = plt.figure()

ims = []
for _ in range(10):
    im1, = plt.plot([random.randrange(10), random.randrange(10)], [random.randrange(10), random.randrange(10)])
    im2, = plt.plot([random.randrange(10), random.randrange(10)], [random.randrange(10), random.randrange(10)])
    ims.append((im1,))
    ims.append((im2,))
ani = animation.ArtistAnimation(fig, ims)

ani.save('im.mp4')

Это случайным образом генерирует две строки im1, im2 10x. Я всегда хочу видеть и im1, и im2 одновременно. Но это показывает только одну строку за раз. Если я прокомментирую ims.append((im1,)), фон будет заполнен stati c строками, но он по-прежнему просто анимирует одну строку. Я также пытался объединить im1 и im2, используя im1 + im2 или [im1, im2], но оба приводят к ошибкам.

Дополнительный вопрос: есть ли причина, по которой blit=False по умолчанию? Подумал, это должно улучшить производительность?

1 Ответ

1 голос
/ 07 мая 2020

Решение - просто добавить в список сразу обоих художников.

Документация говорит о «коллекции художников, которые представляют то, что нужно включить в каждом кадре», поэтому ims должен быть списком списков (по одному на кадр. ) художников (любое за кадр).

import random
import matplotlib.pyplot as plt
import matplotlib.animation as animation

fig = plt.figure()

ims = []
for _ in range(10):
    im1, = plt.plot([random.randrange(10), random.randrange(10)], [random.randrange(10), random.randrange(10)])
    im2, = plt.plot([random.randrange(10), random.randrange(10)], [random.randrange(10), random.randrange(10)])
    ims.append([im1, im2])
ani = animation.ArtistAnimation(fig, ims)

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