use*_*938 6 python animation matplotlib
我尝试使用 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()
Run Code Online (Sandbox Code Playgroud)
要动画艺术家,您必须返回对ims[]数组中每个艺术家的引用,包括Text对象。
但是它不适用于标题,我不知道为什么。也许对所涉及的机制有更好理解的人能够启发我们。
尽管如此,标题只是一个Text对象,因此我们可以使用以下方法产生所需的效果:
fig = plt.figure()
ax = fig.add_subplot(111)
ims=[]
for iternum in range(4):
ttl = plt.text(0.5, 1.01, iternum, horizontalalignment='center', verticalalignment='bottom', transform=ax.transAxes)
txt = plt.text(iternum,iternum,iternum)
ims.append([plt.scatter(np.random.randint(0,10,5), np.random.randint(0,20,5),marker='+' ), ttl, txt])
#plt.cla()
ani = animation.ArtistAnimation(fig, ims, interval=500, blit=False,
repeat_delay=2000)
Run Code Online (Sandbox Code Playgroud)
您需要将要制作动画的艺术家作为序列列表提供给ArtistAnimation. 在问题的代码中,您只提供散点图,而不提供文本和标题。
不幸的是,标题也是轴的一部分,因此即使提供也不会改变。因此,您可以改用普通文本。
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation as animation
fig, ax = plt.subplots()
ims=[]
for iternum in range(4):
title = plt.text(0.5,1.01,iternum, ha="center",va="bottom",color=np.random.rand(3),
transform=ax.transAxes, fontsize="large")
text = ax.text(iternum,iternum,iternum)
scatter = ax.scatter(np.random.randint(0,10,5), np.random.randint(0,20,5),marker='+')
ims.append([text,scatter,title,])
ani = animation.ArtistAnimation(fig, ims, interval=500, blit=False,
repeat_delay=2000)
plt.show()
Run Code Online (Sandbox Code Playgroud)
您可以考虑使用FuncAnimation代替ArtistAnimation. 这将允许轻松更改标题。
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation as animation
fig, ax = plt.subplots()
ims=[]
text = ax.text(0,0,0)
scatter = ax.scatter(np.random.randint(0,10,5), np.random.randint(0,20,5),marker='+')
def update(iternum):
plt.title(iternum)
text.set_position((iternum, iternum))
text.set_text(str(iternum))
scatter.set_offsets(np.random.randint(0,10,(5,2)))
ani = animation.FuncAnimation(fig, update, frames=4, interval=500, blit=False,
repeat_delay=2000)
plt.show()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6802 次 |
| 最近记录: |