在python matplotlib动画中停止/开始/暂停

发布于 2021-01-29 16:16:24

我在matplotlib的动画模块中使用FuncAnimation进行一些基本的动画处理。此功能永久循环播放动画。有没有一种方法可以使我暂停并重新启动动画,例如单击鼠标?

关注者
0
被浏览
255
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    这是一个FuncAnimation示例,我对其进行了修改以暂停鼠标单击。由于动画是由生成器函数驱动的,因此simData,当全局变量pause为True时,产生相同的数据会使动画显得暂停。

    paused通过设置事件回调来切换的值:

    def onClick(event):
        global pause
        pause ^= True
    fig.canvas.mpl_connect('button_press_event', onClick)
    

    import matplotlib.pyplot as plt
    import numpy as np
    import matplotlib.animation as animation
    
    pause = False
    def simData():
        t_max = 10.0
        dt = 0.05
        x = 0.0
        t = 0.0
        while t < t_max:
            if not pause:
                x = np.sin(np.pi*t)
                t = t + dt
            yield x, t
    
    def onClick(event):
        global pause
        pause ^= True
    
    def simPoints(simData):
        x, t = simData[0], simData[1]
        time_text.set_text(time_template%(t))
        line.set_data(t, x)
        return line, time_text
    
    fig = plt.figure()
    ax = fig.add_subplot(111)
    line, = ax.plot([], [], 'bo', ms=10)
    ax.set_ylim(-1, 1)
    ax.set_xlim(0, 10)
    
    time_template = 'Time = %.1f s'
    time_text = ax.text(0.05, 0.9, '', transform=ax.transAxes)
    fig.canvas.mpl_connect('button_press_event', onClick)
    ani = animation.FuncAnimation(fig, simPoints, simData, blit=False, interval=10,
        repeat=True)
    plt.show()
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看