Matplotlib获取ArtistAnimation的所有轴艺术家对象吗?

时间:2019-02-16 19:58:38

标签: python-3.x matplotlib animation

我正在尝试使用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()

这使整个图中的正弦波动画化。目前,我只是将ax.plot()返回的Lines2D对象添加到ims中。但是,我可能希望在轴上绘制多个重叠的图,并为每个帧调整标题,图例和x轴范围。绘制并为每一帧进行所有更改后,如何获得可以添加到ims的对象?

1 个答案:

答案 0 :(得分:2)

您提供给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