Matplotlib的动画

作者: 榴莲气象 | 来源:发表于2019-07-02 14:03 被阅读44次

    Matplotlib的动画
    使用matplotlib库创建一些有趣的动画。
    Matplotlib的动画 - 走向数据科学动画是一种展示现象的有趣方式。我们作为人类总是被迷住了......

    使用matplotlib库创建一些有趣的动画。

    使用Matplotlib进行雨水模拟</figcaption>

    动画是一种展示现象的有趣方式。我们作为人类总是被动画和交互式图表所吸引,而不是静态图表。在描述多年来股票价格,过去十年的气候变化,季节性和趋势等时间序列数据时,动画更有意义,因为我们可以看到特定参数如何随时间变化。

    上面的图像是Rain模拟,并且已经使用Matplotlib库实现,该库被人们称为python可视化包祖父。Matplotlib 通过动画50个散点的比例和不透明度来模拟表面上的雨滴。今天,Python拥有大量强大的可视化工具,如Plotly,Bokeh,Altair等等。这些库能够实现最先进的动画和交互性。尽管如此,本文的目的是强调这个图书馆的一个方面,这个方面没有进行太多探索,而且是动画,我们将看一些这样做的方法。

    概观

    Matplotlib是一个Python 2D绘图库,也是最受欢迎的一个。大多数人开始使用Matplotlib进行数据可视化之旅。可以使用matplotlib轻松生成绘图,直方图,功率谱,条形图,错误图表,散点图等。它还与Pandas和Seaborn等图书馆无缝集成,创造出更加复杂的可视化。

    matplotlib的一些很好的功能是:

    • 它的设计类似于MATLAB,因此在两者之间切换相当容易。
    • 包含许多渲染后端。
    • 可以重现任何情节(需要一点努力)。
    • 因此,已经在那里工作了十多年,拥有庞大的用户群。

    然而,也有一些领域Matplotlib没有那么多,并且落后于强大的同行。

    • Matplotlib有一个命令式的API,通常过于冗长。
    • 有时候风格很差。
    • 对Web和交互式图形的支持不佳。
    • 对于大型复杂数据而言通常很慢。

    至于这里有一个来自Datacamp的Matplotlib作弊表,你可以通过它来完善你的基础知识。

    动画

    Matplotlib的animation基类处理动画部分。它提供了一个围绕其构建动画功能的框架。使用以下两个主要接口来实现:

    [FuncAnimation](https://matplotlib.org/api/_as_gen/matplotlib.animation.FuncAnimation.html#matplotlib.animation.FuncAnimation "matplotlib.animation.FuncAnimation")通过重复调用函数func来制作动画。

    [ArtistAnimation](https://matplotlib.org/api/_as_gen/matplotlib.animation.ArtistAnimation.html#matplotlib.animation.ArtistAnimation "matplotlib.animation.ArtistAnimation"):动画使用固定的一组Artist对象。

    但是,在这两者中,FuncAnimation是最方便使用的。您可以在文档中阅读有关它们的更多信息,因为我们只关注该FuncAnimation工具。

    要求

    • 模块包括numpy并且matplotlib应该安装。
    • 要将系统上的动画保存为mp4或gif,[ffmpeg](https://www.ffmpeg.org/)或者[imagemagick](https://sourceforge.net/projects/imagemagick/files/)需要安装。

    准备好之后,我们可以从Jupyter笔记本中的第一个基本动画开始。可以从关联的Github存储库访问本文的代码,也可以通过单击下面的图像在我的活页夹上查看它。

    [图片上传中...(image-367f22-1562047317891-1)]

    基本动画:移动正弦波

    让我们FuncAnimation用来创建一个在屏幕上移动的正弦波的基本动画。动画的源代码取自Matplotlib动画教程。让我们首先看看输出,然后我们将分解代码以了解引擎盖下的内容。

    • 在第(7-9)行中,我们只是在图中创建一个带有单个轴的图形窗口。然后我们创建空行对象,它实际上是动画中要修改的对象。稍后将使用数据填充行对象。
    • 在第(11-13)行中,我们创建了init使动画发生的功能。init函数初始化数据并设置轴限制。
    • 在第(14-18)行中,我们最终定义了动画函数,该函数将帧编号(i)作为参数并创建正弦波(或任何其他动画),其取决于i的值而移位。此函数返回一个已修改的绘图对象的元组,它告诉动画框架应该动画的哪些部分。
    • 在第20行,我们创建了实际的动画对象。该blit参数确保仅重新绘制已经更改的那些图块。

    这是在Matplotlib中创建动画的基本直觉。通过对代码进行一些调整,可以创建有趣的可视化。我们来看看其中的一些

    越来越多的线圈

    同样,有一个很好的例子,在GeeksforGeeks创建形状。现在让我们animation在matplotlib类的帮助下创建一个缓慢展开的动圈。该代码非常类似于正弦波图,只需稍作调整即可。

    实时更新图表

    在绘制动态数量(如库存数据,传感器数据或任何其他时间相关数据)时,实时更新图表会派上用场。我们绘制了一个基本图表,当更多数据输入系统时,该图表会自动更新。让我们在一个月内绘制一家假想公司的股票价格。

    现在,打开终端并运行python文件。您将获得如下图所示的图表,该图表会自动更新,如下所示:

    这里的间隔是1000毫秒或一秒。

    3D情节上的动画

    创建3D图形很常见,但如果我们可以为这些图形的视角设置动画,该怎么办呢?我们的想法是更改摄像机视图,然后使用每个生成的图像来创建动画。在Python Graph Gallery中有一个很好的部分。

    在与笔记本相同的目录中创建名为volcano的文件夹。所有图像都将存储在此文件夹中,然后将在动画中使用。

    这将在Volcano文件夹中创建多个PNG文件。现在,使用ImageMagick将它们转换为动画。打开终端并导航到Volcano文件夹并输入以下命令:

    convert -delay 10 Volcano * .png animated_volcano.gif

    使用赛璐珞模块的动画

    Celluloid是一个Python模块,简化了在matplotlib中创建动画的过程。该库创建一个matplotlib图并Camera从中创建一个。然后重新使用数字,并在创建每个帧后,使用相机拍摄快照。最后,创建包含所有捕获帧的动画。

    安装

    pip安装赛璐珞

    以下是使用Celluloid模块的一些示例。

    最小

    次要情节

    传奇

    包起来

    动画有助于突出显示可视化的某些功能,否则无法通过静态图表轻松传达。尽管如此,记住不必要和过度使用可视化有时会使事情复杂化也很重要。应明智地使用数据可视化中的每个功能以产生最佳影响。

    相关文章

      网友评论

        本文标题:Matplotlib的动画

        本文链接:https://www.haomeiwen.com/subject/zlpzcctx.html