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

新手上路,请多包涵

我在 matplotlib 的动画模块中使用 FuncAnimation 来制作一些基本动画。这个函数永远循环播放动画。有没有一种方法可以通过点击鼠标来暂停和重新启动动画?

原文由 Jaco Vermaak 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

这是 一个 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)
fig.show()

原文由 unutbu 发布,翻译遵循 CC BY-SA 4.0 许可协议

这有效…

 anim = animation.FuncAnimation(fig, animfunc[,..other args])

#pause
anim.event_source.stop()

#unpause
anim.event_source.start()

原文由 fred 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏