【R图秀-6】地震来了

作者简介Introduction

傅兴:个人公众号:Rapp

往期回顾

【R图秀-1】12306列车数据可视化

【R图秀-2】社交网络数据可视化(一)

【R图秀-3】——“全球和平指数”可视化

【R图秀】情人节快乐!

【R图秀-5】将薪比薪

前几天在网上发现了一个有趣的公共数据源:USGS Earthquake Hazards Program ( http://earthquake.usgs.gov/ ) 这个网站收录了全球范围内的地震数据,包括地震发生的时间、经纬度和震级等信息。

【R图秀-6】地震来了_第1张图片

我们不仅可以通过网页搜索并下载所需的数据,还可以利用网站提供的API,将参数传递给URL从而利用程序自动获取数据。本文采用的是第二种方法。

【R图秀-6】地震来了_第2张图片

这个数据非常适合我们练习地图数据的可视化,今天我们就一起来用R语言制作几个炫酷的全球地震数据分布图。

R图秀曾经展示过静态地图的制作方法,今天我们要从2个方面挑战更高的难度:
1. 动态数据,随着时间变化,改变地图上的数据点
2. 动态地图,画一个旋转的地球,360度展示地图上的数据点

我们选用的工具是mapmate ( https://leonawicz.github.io/mapmate/index.html )

【R图秀-6】地震来了_第3张图片

mapmate = map animate,是专门用来做地图动画的R软件包。它的原理是首先生成一系列图像文件(每一个文件对应一帧),然后利用ffmpeg软件将所有文件整合在一起生成一个GIF动画。

因此,我们在安装完mapmate包后,还要看看自己的系统里面有没有ffmpeg,如果没有,可以在Linux终端中输入下面的命令:

sudo apt-get install ffmpeg

接下来我们就一步步地制作我们的动画短片(如果在阅读中遇到问题,建议首先阅读mapmate的官方文档):
1. 加载所需要的软件包

2. 下载近一个月内,震级大于2.5的地震数据,只保留经(lon)纬(lat)度和震级(mag)

3. 将地震数据制作成一个大的list,list中的每个dataframe对应一帧(我们要360度展示,所以制作了360帧),注意要给每个dataframe添加frameID,frameID就表示该dataframe是来自哪一帧。

mapmate包中自带了2个很有用的数据集。一个是bathymetry(海洋深度数据),另一个是borders(国境线)。和地震数据类似,我们也把它们制作成360帧。

【R图秀-6】地震来了_第4张图片

4. save_map函数是mapmate的核心,我们可以先画第一帧数据(代码中加注释的部分),看看效果如何:
海洋深度:

【R图秀-6】地震来了_第5张图片

国境线:

【R图秀-6】地震来了_第6张图片

地震点:

【R图秀-6】地震来了_第7张图片

如果没有问题,我们就继续制作剩下的359帧。为了加快速度,我用了mclapply函数,利用32个CPU同时计算:

【R图秀-6】地震来了_第8张图片

5. save_map生成的是背景透明的png文件,我们可以把bath,border和earthquake图像作为3个图层merge在一起。这里用的是ImageMagick软件的convert工具。

【R图秀-6】地震来了_第9张图片

merge后的效果:

【R图秀-6】地震来了_第10张图片

最后用ffmpeg将所有图像制作成一个gif文件。
代码如下:

6. 除了地球模式,mapmate还可以制作平面地图,我们可以将上面的代码稍作修改:

【R图秀-6】地震来了_第11张图片

这里的目的是让第一帧只有一个点,第2帧有2个点,以此类推,大家可以想象一下出来的效果是怎样的。

【R图秀-6】地震来了_第12张图片

7. 我还不满足得到的gif动画,接下来我利用一些音频和视频编辑软件,制作了一个名为《Eearthquake》的视频短片,供大家欣赏。https://v.qq.com/x/page/i0377gidh77.html

class="video_iframe" data-vidtype="1" allowfullscreen="" scrolling="no" frameborder="0" data-ratio="1.7647058823529411" data-w="480" data-src="http://v.qq.com/iframe/player.html?vid=i0377gidh77&width=670&height=376.875&auto=0" style="display: none; width: 670px !important; height: 376.875px !important;" width="670" height="376.875" data-vh="376.875" data-vw="670"/>



 往期精彩内容整理合集 

2017年R语言发展报告(国内)

R语言中文社区历史文章整理(作者篇)

R语言中文社区历史文章整理(类型篇)


公众号后台回复关键字即可学习

回复 R                  R语言快速入门及数据挖掘 
回复 Kaggle案例  Kaggle十大案例精讲(连载中)
回复 文本挖掘      手把手教你做文本挖掘
回复 可视化          R语言可视化在商务场景中的应用 
回复 大数据         大数据系列免费视频教程 
回复 量化投资      张丹教你如何用R语言量化投资 
回复 用户画像      京东大数据,揭秘用户画像
回复 数据挖掘     常用数据挖掘算法原理解释与应用
回复 机器学习     人工智能系列之机器学习与实践
回复 爬虫            R语言爬虫实战案例分享

你可能感兴趣的:(【R图秀-6】地震来了)