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模块的一些示例。
最小
次要情节
传奇
包起来
动画有助于突出显示可视化的某些功能,否则无法通过静态图表轻松传达。尽管如此,记住不必要和过度使用可视化有时会使事情复杂化也很重要。应明智地使用数据可视化中的每个功能以产生最佳影响。
网友评论