独家 | 6步教你用R语言制作动图

简介:

引言

 

数据可视化可能是数据科学领域最重要却通常最少被提及的部分。

 

我这么说是因为创造数据故事和可视化对你的顾客最终怎么看待你的工作有巨大的影响。数据科学不仅仅是说你的模型如何复杂或精细,它是使用基于数据的洞察力来解决问题(的范畴)。并且,为了实施这些解决方案,你的领导们需要了解你的计划


在创造有影响力的可视化进程中,挑战之一便是创造能够自己讲话的图像。这篇文章将会告知一种方式来帮你创作可使用的生动的GIF图像(即图表可交互化格式)。当你想要显示基于时间或者基于循环的故事时,这种方式将对你非常有帮助。在图片中采用动画的形式,你可以为特定组合的参数的画出随时间流动的可比的数据。换言之,理解并且看到某些参数随时间(的演进)而发生的改变。


请允许我用一个例子展示给你:

 

例子:GDP与预期寿命相比较

 

假如说你想去展示不同的洲/国家的GDP和预期寿命是怎样随时间的改变而改变的。你认为什么是最好的方式来展现这种关系呢?

你可以考虑多种选择,比如说:


  • 创造一个和GDP、预期寿命以及时间相关的3D制图,为每个洲或国家画出线条。问题是:人类阐释以2D形式画出3D图像的能力是非常的薄弱的,尤其是当存在太多数据时。因此,这个选择不奏效。


  • 一并创造2个图表:一个展示随时间而改变的GDP,另一个则显示随时间而变的预期寿命。这是一个二维制图。我们为读者留下了很多空间去诠释。读者需要选定一个国家并且看这个国家在每一个节点上的变化,然后把他们串联起来。最后再次循环。


现在,让我们看这个生动的动图文件吧。



Gganimate包的发展使得这问题更加容易实现。在这篇文章的最后,你可以制作属于自己的动图文件并且创造自己的定制框架以在全球或当地范围内比对不同的参数。

 

首要事宜


请先安装以下包:


  • ggmap

  • gganimate

  • dplyr

  • animation


此外,除了以上R库,你也需要自己的系统中有Image Magick软件。你可以下载并安装这个软件(https://www.imagemagick.org/download/binaries/ImageMagick-7.0.4-7-Q16-x64-static.exe)

 

获取数据


这篇文章试图用1965到2016年的地震数据来制作动图文件。最好是在地图上按年份顺序绘制全球地表活动而非静态呈现所有的数值。地震的数据集在Kaggle上是开放的(https://www.kaggle.com/usgs/earthquake-database)。数据集包括1965年至2016年地球地震活动的数据。请访问以上链接并且向下滚动以得到csv的文件夹。

 

从1965到2016年的发生过的里氏震级为7.0的大地震:这个数据集已经被改良过,只有里氏震级为7级的数据才被用于研究。

 

数据处理


为了简化流程,从csv文件夹里我们只挑选了很少几个变量:


  • 日期Date)

  • 时间(Time)

  • 经度(Latitude)

  • 纬度(Longitude)

  • 类型(Type,即地震活动的类型)

  • 宽度(Depth,即从地面闭合处到震源中心的距离)

  • ID(ID,即地震活动的事件标识)

  • 震级(Magnitude,即里氏震级的读数)


我们都准备开始用R语言译码,使用过R工作室的环境。你可以自由地使用你偏爱的任何环境。

 

R语言代码

 


把日期分割到年、月和天


我们要做这件事情是因为我们要得到对绘图非常重要的。换言之,这个方法的核心就是将框架(frame)当成另一维度,就像x,y轴,尺寸,颜色,等等。因此,你的数据中的一个变量可以被投射到框架中,这个过程就像其他变量被投射到X或者y。




使用animation包来加速gif图片中的投影

 

正如我们看到的那样:这个动图包含1965年到2016年多年的图片。因此,为了加速可视化的呈现,我们可以用Animation包中的ani.option()来加速。





结论


这篇文章是对动图世界的一个入门教程。读者可以在其他的项目里尝试和应用同样的方法。一些例子如下:


  • 相同的技术可以被用于比较不同国家的天气数据的热力地图。

  • 一段时期内某个特定地点洪水或其他自然灾害。

  • 可以利用德罗内三角板来见证城市地铁的增长。可以看Page Piccinini在r-Bloggers所发布的有趣的文章《随时间变化的地铁系统》(https://pagepiccinini.com/2016/09/27/metro-systems-over-time/)或者你可以直接从她的官网(https://pagepiccinini.com/2016/09/27/metro-systems-over-time/)访问她的页面。


希望你觉得这篇文章有用。如果你有任何问题,欢迎在以下的评论区询问。


原文发布时间为:2017-08-28

本文作者:GUEST BLOG

本文来自云栖社区合作伙伴“数据派THU”,了解相关信息可以关注“数据派THU”微信公众号

相关文章
Windows中如何查看被占用的端口、杀掉对应的进程
这篇文章介绍了在Windows系统中如何查看被占用的端口号以及如何杀掉占用端口的进程,包括使用命令提示符的`netstat -ano | findstr 端口号`命令查找进程PID,然后通过任务管理器或`taskkill /PID PID号`命令来结束进程。
Windows中如何查看被占用的端口、杀掉对应的进程
|
1天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
251 116
|
16天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
11天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
645 219
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
879 61
|
9天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1431 157
|
6天前
|
编解码 Linux 数据安全/隐私保护
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
276 139