我已经使用 matplotlib 创建绘图有一段时间了,但现在才发现动画
选项。我想使用 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,))
,则背景充满静态线条,但它仍然只为一行添加动画。
我还尝试使用 im1 + im2
或 [im1, im2]
组合 im1
和 im2
,但两者都导致错误。
额外问题:默认情况下是否有任何原因blit=False
?我想,这应该可以提高性能吗?
最佳答案
解决方案很简单,将两位艺术家同时添加到列表中。
documentation谈论“代表需要在每帧上启用的内容的艺术家集合”,因此 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')
关于python - Matplotlib ArtistAnimation 一步显示多个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61639399/