作者 | Viviane

译者 | 刘旭坤

编辑 | Jane

出品 | AI科技大本营

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

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

下载地址:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

原文链接:

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

--【完】--

寻找2018最佳AI应用案例

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

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

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

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

  1. python myqr制作二维码生成器_用Python生成动态二维码,只要5行代码,拥有你的个性二维码!...

    原标题:用Python生成动态二维码,只要5行代码,拥有你的个性二维码! 前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. P ...

  2. 最简单方法!!用python生成动态条形图(解决报错问题!)

    最简单方法!!用python生成动态条形图 文章目录 最简单方法!!用python生成动态条形图 1. 安装第三方包: bar_chart_race 2. 数据准备 3. 函数讲解 4. 详细举例(复 ...

  3. 用Python生成动态好玩的二维码

    用Python生成动态好玩的二维码 互联网时代可谓是一手机走天下,二维码已经成为我们工作生活中不可或缺的一种媒介了,不管是社交.出行还是支付,二维码已经在熟悉不过了,似乎人人都有一种"见码就 ...

  4. python绘制动态图表怎么存下来_用python如何实现导入excel数据后自动生成图表?python如何实现交互式动态图表?...

    这个需求涉及的环节太多了.导入excel文件,获取数据 -- 需要xlrd模块把数据导入python 2. 设定输出图表类型 -- 需要matplot模块.根据数据复杂度,可能需要ETL,那么需要pa ...

  5. Python 制作动态图表,看全球疫情变化趋势

    作者 | 刘早起早起 责编 | 屠敏 前言 最近国内疫情已经有所好转,但是国外的情况不容乐观,那么怎样用Python去制作动态图表来看全球疫情变化趋势呢?比如下面的国内外疫情发展趋势: 还是全球疫情发 ...

  6. python制作动态心电图_用python制作动态图表看全球疫情变化趋势

    点击上方"早起python",关注公众号 满满干货,极速送达 一.前言 最近国内疫情已经有所好转,但是国外的情况不容乐观,那么怎样用python去制作动态图表来看全球疫情变化趋势呢 ...

  7. python绘制动态图表怎么存下来_做动态图表,没有数据?用Python就能获取!

    这是小F在国庆之前写的一篇文章,全网阅读累计达到3万+. 既然有了Python这个制作动态条形图工具,缺的那便是数据了. 先看一下B站2019年「数据可视化」版块的情况,第一个视频超2百万的播放量,4 ...

  8. python制作ppt动画_天呐,还能这么玩!用 Python 生成动态 PPT

    在工作的过程中,我们会发现那些能够把知识.成果讲透的人很多都会做动态图表. 这篇文章就介绍了 Python 中一种简单的动态图表制作方法,这样生成的动图就可以丰富我们的PPT啦~ 数据暴增的年代,数据 ...

  9. Python生成动态二维码,运用神库:qrcode

    一.介绍 1.1 二维码 二维码又称二维条码,常见的二维码为 QR Code,QR 全称 Quick Response.是一个近几年来移动设备上超流行的一种编码方式,在现在的生活中二维码随处可见.我们 ...

最新文章

  1. 2020牛客多校第1场H-Minimum-cost Flow
  2. ARKit如何将太阳系装进iPhone(二)
  3. Windows 2008 R2 X64 安装WebsitePanel(WSP虚拟主机管理面板)
  4. 【CSS】选择器优先级
  5. 关于我转生变成史莱姆这档事
  6. 征战蓝桥 —— 2016年第七届 —— C/C++A组第5题——消除尾一
  7. 安卓布局参数类LayoutParams
  8. c++ 读取访问权限冲突_Linux系统利用可执行文件的Capabilities实现权限提升
  9. 一种基于JSON语法的JSON数据转换器
  10. Android自学视频百度网盘链接
  11. 数控机床CNC编程入门【G-code】
  12. 计算机系固态硬盘机械硬盘,固态硬盘和机械硬盘可以在一起使用吗?
  13. Javascript实战应用篇(2):继续完善网页文本框系列(增加水印和提示)
  14. 【Android UI设计与开发】5.底部菜单栏(二)使用Fragment实现底部菜单栏
  15. 为什么我发的视频播放量老涨不上去?
  16. 台阶的意思_正屋大门前几步台阶好 二步台阶进屋的含义 三步台阶进屋的含义...
  17. 东师理想运维工具开发路线图(第一阶段)
  18. 架构师之路系列:接口幂等性是个什么东东?如何实现接口幂等设计?
  19. Python之DNS解析
  20. 用函数编程计算反馈意见的平均数(Mean)、中位数(Median)和众数(Mode)

热门文章

  1. [Nginx优化]分享nginx配置文件及优化说明
  2. 更加安全的存取账户密码
  3. 图片上传(加水印、缩略图、远程保存)的简单例子
  4. php 请求方式,PHP发起HTTP请求有哪几种方式?
  5. 安装SecureCRT
  6. C# 视频多人脸识别的实现
  7. E: GPG 错误:http://developer.download.nvidia.com Release: 下列签名无效: NODATA 1 NODATA 2...
  8. 开始Hibernate介绍
  9. Media Queries
  10. 【组队学习】【34期】阿里云天池在线编程训练营