使用 Matplotlib 创建动画

MatplotlibMatplotlibBeginner
立即练习

This tutorial is from open-source community. Access the source code

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本实验中,你将学习如何使用 Matplotlib 创建动画。具体来说,你将学习如何使用Animation.pause()Animation.resume()方法暂停和恢复动画。

虚拟机使用提示

虚拟机启动完成后,点击左上角切换到笔记本标签页,以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,请随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。

导入库

在这一步中,我们将导入必要的库,以便使用 Matplotlib 创建动画。

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation as animation

定义动画

在这一步中,我们将定义想要创建的动画。我们将创建一个动画,该动画展示一个正态分布,并且每一帧都向右移动。

class PauseAnimation:
    def __init__(self):
        ## 创建图形和坐标轴
        fig, ax = plt.subplots()
        ax.set_title('Click to pause/resume the animation')

        ## 创建 x 轴的值
        x = np.linspace(-0.1, 0.1, 1000)

        ## 从一个正态分布开始
        self.n0 = (1.0 / ((4 * np.pi * 2e-4 * 0.1) ** 0.5)
                   * np.exp(-x ** 2 / (4 * 2e-4 * 0.1)))

        ## 创建绘图
        self.p, = ax.plot(x, self.n0)

        ## 创建动画
        self.animation = animation.FuncAnimation(
            fig, self.update, frames=200, interval=50, blit=True)

        ## 将动画设置为未暂停
        self.paused = False

        ## 添加一个按钮按下事件来切换暂停状态
        fig.canvas.mpl_connect('button_press_event', self.toggle_pause)

    def toggle_pause(self, *args, **kwargs):
        ## 在暂停和未暂停之间切换
        if self.paused:
            self.animation.resume()
        else:
            self.animation.pause()
        self.paused = not self.paused

    def update(self, i):
        ## 更新正态分布
        self.n0 += i / 100 % 5
        self.p.set_ydata(self.n0 % 20)
        return (self.p,)

创建动画对象

在这一步中,我们将创建一个在第 2 步中定义的PauseAnimation类的对象。

pa = PauseAnimation()

展示动画

在这一步中,我们将展示在第 2 步中创建的动画。

plt.show()

总结

在这个实验中,你学习了如何使用 Matplotlib 创建动画,以及如何使用Animation.pause()Animation.resume()方法暂停和恢复动画。你还学习了如何创建一个响应用户输入的交互式动画。有了这些知识,你可以创建自己的自定义动画并为其添加交互性。