我尝试使用matplotlib的ArtistAnimation。图的文本和标题应该在每一帧中改变,但它们没有。我读过很多类似问题的帖子,但我仍然不明白什么是解决方案。演示没有显示更新标题,因为我可以找到。
如果有人知道,我会很感激的!
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation as animation
fig =plt.figure()
ims=[]
for iternum in range(4):
plt.title(iternum)
plt.text(iternum,iternum,iternum)
ims.append([plt.scatter(np.random.randint(0,10,5), np.random.randint(0,20,5),marker='+' )])
#plt.cla()
ani = animation.ArtistAnimation(fig, ims, interval=500, blit=False,
repeat_delay=2000)
plt.show()
3条答案
按热度按时间mepcadol1#
要为艺术家制作动画,必须返回
ims[]
数组中每个艺术家的引用,包括Text
对象。但它不适用于标题,我不知道为什么。也许有人对其中的机制有更好的理解,将能够启发我们。
尽管如此,标题只是一个
Text
对象,所以我们可以使用以下命令来产生所需的效果:3pvhb19x2#
您需要为艺术家提供动画,作为序列列表到
ArtistAnimation
。在问题的代码中,您只提供散点,而不提供文本和标题。不幸的是,标题也是轴的一部分,因此不会改变,即使提供。因此,您可以使用普通文本代替。
您可以考虑使用
FuncAnimation
而不是ArtistAnimation
。这样可以很容易地更改标题。tktrz96b3#
假设你画一条线,得到一个
Line2D
对象。然后使用Line2D.set_data
更新该行。当对象是同一个时,数据(以及线的位置)会发生变化,因此当您执行ArtistAnimation
时,不同的帧将显示同一个对象,其中包含更新的信息。现在来看看标题。文件上说
设置三个可用轴标题之一。可用字幕位于轴上方的中心,与左边缘齐平,与右边缘齐平。
源代码是
这是同样的情况。
Title
对象是预先构造的,只更新其内容(而不是对象)。当您执行ArtistAnimation
时,只有最后一次更新有效。为了避免这种情况,正如@Diziet Asahi和@ImportanceOfBeingErnest所建议的,使用
Text
或FuncAnimation
。