我正在尝试使用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
的对象?
答案 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
。