📅  最后修改于: 2023-12-03 15:22:30.959000             🧑  作者: Mango
当使用Matplotlib制作动画时,有时需要在运行过程中停止动画。下面介绍如何停止Matplotlib动画。
在使用 FuncAnimation
创建动画时,可以将返回的对象(animation
)用作 FuncAnimation
实例上的 event_source
属性。然后可以使用 event_source.stop()
方法停止动画。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
fig, ax = plt.subplots()
def update(frame):
ax.clear()
xdata, ydata = [], []
# 在这里添加代码更新数据和图形
return ax.plot(xdata, ydata)
animation = FuncAnimation(fig, update, frames=100, repeat=False)
animation.event_source.stop() # 停止动画
如果需要在 update
函数之外停止动画,则需要使用全局变量来保存返回的 FuncAnimation
实例,然后在其他地方使用 event_source.stop()
停止动画。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
fig, ax = plt.subplots()
animation = None # 全局变量来保存动画
def update(frame):
ax.clear()
xdata, ydata = [], []
# 在这里添加代码更新数据和图形
return ax.plot(xdata, ydata)
def start_animation():
global animation
animation = FuncAnimation(fig, update, frames=100, repeat=False)
def stop_animation():
global animation
if animation is not None:
animation.event_source.stop()
start_animation()
stop_animation() # 停止动画
可以将按钮绑定到 matplotlib.widgets.Button
对象上,并使用 event_source.stop()
方法停止 FuncAnimation
实例。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
from matplotlib.widgets import Button
fig, ax = plt.subplots()
animation = None # 全局变量来保存动画
def update(frame):
ax.clear()
xdata, ydata = [], []
# 在这里添加代码更新数据和图形
return ax.plot(xdata, ydata)
def start_animation():
global animation
animation = FuncAnimation(fig, update, frames=100, repeat=False)
def stop_animation(event):
global animation
if animation is not None:
animation.event_source.stop()
start_button_ax = fig.add_axes([0.7, 0.9, 0.2, 0.1])
start_button = Button(start_button_ax, "Start")
start_button.on_clicked(start_animation)
stop_button_ax = fig.add_axes([0.7, 0.8, 0.2, 0.1])
stop_button = Button(stop_button_ax, "Stop")
stop_button.on_clicked(stop_animation)
plt.show()
以上是停止动画matplotlib的方法,根据不同的场景可以选择使用不同的方式。