📜  停止动画 matplotlib - Python (1)

📅  最后修改于: 2023-12-03 15:22:30.959000             🧑  作者: Mango

停止动画 matplotlib - Python

当使用Matplotlib制作动画时,有时需要在运行过程中停止动画。下面介绍如何停止Matplotlib动画。

使用 FuncAnimation

在使用 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()  # 停止动画
使用 FuncAnimation 和全局变量

如果需要在 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()  # 停止动画
使用 FuncAnimation 和按钮

可以将按钮绑定到 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的方法,根据不同的场景可以选择使用不同的方式。