Matplotlib的动画

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模块的一些示例。

最小

次要情节

传奇

包起来

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,049评论 5 473
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,478评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,109评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,097评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,115评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,280评论 1 279
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,748评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,398评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,553评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,440评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,487评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,176评论 3 317
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,750评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,821评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,049评论 1 257
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,559评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,150评论 2 341

推荐阅读更多精彩内容