gpt4 book ai didi

python-2.7 - matplotlib 动画,文本不更新

转载 作者:行者123 更新时间:2023-12-04 12:56:31 25 4
gpt4 key购买 nike

我刚开始使用 Matplotlib 制作动画,遇到了一些麻烦。我想创建一个粒子位置的动画,并且我想在每一步显示帧数。我在代码片段的开头创建了示例数据,因此代码是独立的(通常我的数据是从 csv 中读取的)。

问题 - 显示的图是完全空白的。但是,如果我注释掉 time_text 的返回(即将“返回补丁,time_text”更改为“返回补丁”),一切正常。我假设问题出在我更新 time_text 的方式上,但我不知道如何修复它。


from matplotlib import pyplot as plt  
from matplotlib import animation
import numpy as np
import pandas as pd

box_size = 50
radius = 1

df =pd.DataFrame(np.array([np.arange(50),np.arange(50),np.arange(50)]).T,
columns = ['x','y','frame'])

#set up the figure
fig = plt.figure()
plt.axis([0,box_size,0,box_size])
ax = plt.gca()
ax.set_aspect(1)
time_text = ax.text(5, 5,'')

#initialization of animation, plot empty array of patches
def init():
time_text.set_text('initial')
return []

def animate(i):
patches = []
#data for this frame only
data = df[df.frame == i]
time_text.set_text('frame'+str(i))
#plot circles at particle positions
for idx,row in data.iterrows():
patches.append(ax.add_patch(plt.Circle((row.x,row.y),radius,color= 'b',
alpha = 0.5)))
return patches, time_text

anim = animation.FuncAnimation(fig, animate, init_func=init, repeat = False,
frames=int(df.frame.max()), interval=50,
blit=True)

最佳答案

您需要让您的初始化函数返回 pyplot.text 对象。您还应该在每次调用 anim 函数时启动要修改的对象。

看看ArtistAnimation ,它可能更适合您正在做的事情。

为了避免许多圆圈聚集在 Canvas 上,我宁愿更新路径对象的位置,而不是在每次迭代时附加新的圆圈。

from matplotlib import pyplot as plt  
import matplotlib.patches as patches
from matplotlib import animation
import numpy as np
import pandas as pd

box_size = 50
radius = 1

df = pd.DataFrame(np.array([np.arange(50),np.arange(50),np.arange(50)]).T,
columns = ['x','y','frame'])

#set up the figure
fig = plt.figure()
plt.axis([0,box_size,0,box_size])
ax = plt.gca()
time_text = ax.text(5, 5,'')

circle = plt.Circle((1.0,1.0), radius,color='b', alpha=0.5, facecolor='orange', lw=2)


#initialization of animation, plot empty array of patches
def init():
time_text.set_text('initial')
ax.add_patch( circle )
return time_text, ax

def animate(i):
#data for this frame only
data = df[df.frame == i]
time_text.set_text('frame' + str(i) )

#plot circles at particle positions
for idx,row in data.iterrows():
circle.center = row.x,row.y

return time_text, ax

anim = animation.FuncAnimation(fig, animate, init_func=init, repeat = False,
frames=int(df.frame.max()), interval=200, blit=True)

plt.show()

关于python-2.7 - matplotlib 动画,文本不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27954437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com