代码之家  ›  专栏  ›  技术社区  ›  user3363813

使用可变时间设置动画

  •  0
  • user3363813  · 技术社区  · 6 年前

    我有轨迹数据,每辆车都有自己的启动时间。每辆车都是动画中的一个点。因此,在数据集中,每一行都有坐标点(x,y)和时间戳。所以,固定的时间间隔对我不起作用。我试过了 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])
    

    如何获得动画效果?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Mr. T Andres Pinzon    6 年前

    已经提到的 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