我有轨迹数据,每辆车都有自己的启动时间。每辆车都是动画中的一个点。因此,在数据集中,对于每一行,都有坐标点(x,y)和时间戳。所以,固定的时间间隔对我不起作用。我尝试使用loop
和sleep
,但它没有显示动画,只显示了第一个结果。但是如果逐行调试,似乎没关系(每次迭代后用新点更新)。这是我的代码(这是测试:loop
,sleep
和animation
):
#sample data
x=[20,23,25,27,29,31]
y=[10,12,14,16,17,19]
t=[2,5,1,4,3,1,]
#code
fig, ax = plt.subplots()
ax.set(xlim=(10, 90), ylim=(0, 60))
for i in range(1,6):
ax.scatter(x[:i+1], y[:i+1])
plt.show()
time.sleep(t[i])
如何获得动画效果?
答案 0 :(得分:1)
已经提到的FuncAnimation
有一个参数frame
,动画函数可以使用索引:
import matplotlib.pyplot as plt
import matplotlib.animation as anim
fig = plt.figure()
x=[20,23,25,27,29,31]
y=[10,12,14,16,17,19]
t=[2,9,1,4,3,9]
#create index list for frames, i.e. how many cycles each frame will be displayed
frame_t = []
for i, item in enumerate(t):
frame_t.extend([i] * item)
def init():
fig.clear()
#animation function
def animate(i):
#prevent autoscaling of figure
plt.xlim(15, 35)
plt.ylim( 5, 25)
#set new point
plt.scatter(x[i], y[i], c = "b")
#animate scatter plot
ani = anim.FuncAnimation(fig, animate, init_func = init,
frames = frame_t, interval = 100, repeat = True)
plt.show()
等效地,您可以在ArtistAnimation
列表中多次存储相同的帧。基本上是flipbook方法。