【问题标题】:Matplotlib ArtistAnimation showing multiple elements in one stepMatplotlib ArtistAnimation 一步显示多个元素
【发布时间】:2020-05-06 15:45:28
【问题描述】:

我一直在使用 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')

这会随机生成两行im1im2 10x。我总是想同时看到im1im2。但这一次只显示一行。 如果我评论ims.append((im1,)),背景充满了静态线条,但它仍然只是动画一条线。 我还尝试使用im1 + im2[im1, im2] 组合im1im2,但两者都会导致错误。

额外问题:默认blit=False有什么原因吗?我想,它应该提高性能?

【问题讨论】:

    标签: python matplotlib animation


    【解决方案1】:

    解决方案是同时将两位艺术家添加到列表中。

    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')
    

    【讨论】:

    • 啊,就是这么简单! :D 我尝试添加列表,类似于添加每个艺术家的方式:ims.append(([im1,im2],)),这给了我一个错误。我仍然不太明白为什么我必须以如此奇怪的方式通过个别艺术家。但这解决了我的问题;谢谢!
    • 另外,你知道如何决定是否启用blit吗?为什么默认禁用?
    • 另外,我还有一个后续问题,您或许可以回答:stackoverflow.com/questions/61652069/…
    • @CGFoX 如果您认为动画实际上期望这种格式[(artists of frame 1,), (artists of frame 2,), ...],这并不奇怪:) 我不确定,但我认为 blitting 已禁用,因此轴刻度和标签可以重绘。通常,当我们使用固定背景 + 移动艺术家时,它只涉及在边界框内重绘(因此它很有效,但您不能再更改比例)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    相关资源
    最近更新 更多