Matplotlib получить все объекты художника оси для ArtistAnimation? - PullRequest
0 голосов
/ 16 февраля 2019

Я пытаюсь создать анимацию с помощью ArtistAnimation, например:

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

fig, ax = plt.subplots()

ims = []
for i in range(60):
    x = np.linspace(0,i,1000)
    y = np.sin(x)
    im = ax.plot(x,y, color='black')
    ims.append(im)

ani = animation.ArtistAnimation(fig, ims, interval=50, blit=True,
                                repeat_delay=1000)

plt.show()

Это оживляет синусоидальную волну, растущую по всей фигуре.В настоящее время я просто добавляю объект Lines2D, возвращаемый ax.plot() в ims.Тем не менее, я хотел бы потенциально нарисовать несколько перекрывающихся графиков на осях и настроить заголовок, легенду и диапазон оси X для каждого кадра.Как получить объект, который я могу добавить к ims после построения и внесения всех желаемых изменений для каждого кадра?

1 Ответ

0 голосов
/ 16 февраля 2019

Список, который вы предоставляете ArtistAnimation, должен быть списком художников, по одному списку на кадр.

artist_list = [[line1a, line1b, title1], [line2a, line2b, title2], ...]

, где первый список отображается в первом кадре, второй список во втором кадре и т. Д.

Причина, по которой ваш код работает, заключается в том, что ax.plot возвращает список строк(в вашем случае только список из одной строки).

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

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

fig, ax = plt.subplots()

artist_list = []
for i in range(60):
    x = np.linspace(0,i,1000)
    y = np.sin(x)
    line, = ax.plot(x,y, color='black')
    text = ax.text(i,0,i)
    artist_list.append([line, text])

ani = animation.ArtistAnimation(fig, artist_list, interval=50, blit=True,
                                repeat_delay=1000)

plt.show()

В общем, будет сложно анимировать изменение границ осей с помощьюArtistAnimation, поэтому, если это конечная цель, рассмотрите возможность использования FuncAnimation.

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