动画时间可变

时间:2018-04-12 12:16:57

标签: python matplotlib visualization

我有轨迹数据,每辆车都有自己的启动时间。每辆车都是动画中的一个点。因此,在数据集中,对于每一行,都有坐标点(x,y)和时间戳。所以,固定的时间间隔对我不起作用。我尝试使用loopsleep,但它没有显示动画,只显示了第一个结果。但是如果逐行调试,似乎没关系(每次迭代后用新点更新)。这是我的代码(这是测试:loopsleepanimation):

    #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])

如何获得动画效果?

1 个答案:

答案 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方法。

示例输出: enter image description here