使用Python生成动态图表,一个很Cool的教程

栏目: Python · 发布时间: 6年前

内容简介:作者 | Viviane译者 | 刘旭坤

使用 <a href='https://www.codercto.com/topics/20097.html'>Python</a> 生成动态图表,一个很Cool的教程

作者 | Viviane

译者 | 刘旭坤

编辑 | Jane

出品 | AI科技大本营

【导读】 Matplotlib 和 Seaborn 用来做数据固定的静态图表很不错,但如果需要动态显示数据的变化过程用这俩库就有点难度了。如果能用短视频来动态展示图表中数据的变化是不是就有点厉害了?而且不用学新的库,就用Matplotlib 和 Seaborn,是不是更厉害了! 今天就教大家一个很酷的教程,马上动起来。

使用Python生成动态图表,一个很Cool的教程

这里我们用到的数据是由美国疾控中心和药物滥用研究所收集的。我最近用他们的数据给一个关于美国鸦片药物滥用危机的纪录片做了几个动态图所以这里就接着用了。下面是数据的下载链接:

下载地址:

https://www.drugabuse.gov/sites/default/files/overdose_data_1999-2015.xls

除了用 Matplotlib 和 Seaborn 来作图我们还用到了 Numpy 和 Pandas 来处理数据。先把需要的库都 import 进来:

使用Python生成动态图表,一个很Cool的教程

接下来把数据从下载的Excel文件读进来,我们用Pandas来读所以读进来就是一个DataFrame。这里我们还写了一个传入行数只读取一行数据的函数。这是为了以后给不同药物分别做图的时候读数据方便一些。

使用Python生成动态图表,一个很Cool的教程

这些准备工作做好我们就可以开始作图了。如果你用 Jupyter Notebook的 话记得加图表页内显示的命令  %matplotlib notebook。

我们先用刚才写的  get_data  函数把因为海洛因死亡的人数读出来。这个 DataFrame 有两列,分别是年份和死亡人数。

使用Python生成动态图表,一个很Cool的教程

接下来我们初始化一个 ffmpeg 输出流。这里我设置帧率 20 码率 1800 ,当然你自己可以改帧率和码率。

使用Python生成动态图表,一个很Cool的教程

下面我们需要创建图表和横纵坐标。这里要把数据范围定死不然数据更新的时候 Matplotlib 会自动更新数据范围我们的动图数据范围就会来回变。

使用Python生成动态图表,一个很Cool的教程

绘图中最重要的就是下面这个 animate 函数,它的参数 i 指的是帧数。我们通过参数 i 来选择这一帧应该显示的数据然后用 Seaborn 来画一个折线图。最后两行改改字体和折线的宽度让图好看一点。

使用Python生成动态图表,一个很Cool的教程

要让图表动起来我们得把刚才定义的 animate 函数传给 matplotlib.animation.FuncAnimation 。除了 animate ,FuncAnimation还有一个参数 frames ,这个参数的意思是说我们这段动画想一共要多少帧。这里 frames 的值是 17 帧,所以 animate 函数会被调用17次。

使用Python生成动态图表,一个很Cool的教程

最后我们把这段动画存成 mp4 格式就行了。如果想先看看效果,可以用 plt.show()

使用Python生成动态图表,一个很Cool的教程

最后出来的效果是这样的:

使用Python生成动态图表,一个很Cool的教程

意思是有了但给人感觉数据的跳跃有点太快了,所以我们可能得给数据点中间插点值。插值可以用下面的 augment 函数:

使用Python生成动态图表,一个很Cool的教程

augment 函数处理完数据我们还要调整一下 FuncAnimation 函数中的帧数。这里我给 augment 传入的 numsteps 是 10,也就是说 augment 后从99 年到 15 年的 16 个数据点变成了 160 个,所以帧数也要设成 160。调整完的图看着顺溜多了,不过在数据增减变化的地方还是能看到很硬的拐弯。

使用Python生成动态图表,一个很Cool的教程

为了让这些拐角也平滑一点我们参考了下面这个链接里的高斯平滑算法。这个链接里也介绍了其他的平滑算法。

https://www.swharden.com/wp/2008-11-17-linear-data-smoothing-in-python/

此外我们还可以给图片加点背景色。

使用Python生成动态图表,一个很Cool的教程

大功告成!其实不是大功,只是用 Matplotlib 制作动态图表的一个很基本的例子。不过原理都是一样的,在 animate 函数里绘图然后调整调整合适的参数什么图都能动起来。最后 希望大家顺利操作起来!

原文链接: 

https://towardsdatascienc e.com/how-to-create-animated-graphs-in-python-bb619cc2dec1

--【完】--

寻找2018最佳AI应用案例

AI科技大本营希望找到在汽车、金融、教育、医疗、安防、零售、家居、文娱、工业等 9 大行业的最佳 AI 应用案例,记录 AI 时代影响人类发展的变革性产品/解决方案。

如果您有优秀的 AI 产品/技术解决方案,欢迎 【扫码提交】 ,参与评选。

使用Python生成动态图表,一个很Cool的教程

点击 「阅读原文」 ,查看案例分享者特别奖励


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

法律程序的意义:对中国法制建设的另一种思考

法律程序的意义:对中国法制建设的另一种思考

季卫东 / 中国法制出版社 / 2005-1 / 10.0

《法律程序的意义:对中国法制建设的另一种思考》内容为现代程序的概念与特征、现代程序的结构与功能、程序与现代社会、中国法律程序的缺陷、程序建设的程序等。一起来看看 《法律程序的意义:对中国法制建设的另一种思考》 这本书的介绍吧!

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具