【R图秀-12】地震来了

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

【R图秀-12】地震来了_第1张图片
usgs_home.png

我们不仅可以通过网页搜索并下载所需的数据,还可以利用网站提供的API,将参数传递给URL从而利用程序自动获取数据。本文采用的是第二种方法。
【R图秀-12】地震来了_第2张图片
usgs_search.png

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

R图秀曾经展示过静态地图的制作方法,今天我们要从2个方面挑战更高的难度:

  1. 动态数据,随着时间变化,改变地图上的数据点
  2. 动态地图,画一个旋转的地球,360度展示地图上的数据点

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

【R图秀-12】地震来了_第3张图片
mapmate_home.png

mapmate = map animate,是专门用来做地图动画的R软件包。它的原理是首先生成一系列图像文件(每一个文件对应一帧),然后利用ffmpeg软件将所有文件整合在一起生成一个GIF动画。
因此,我们在安装完mapmate包后,还要看看自己的系统里面有没有ffmpeg,如果没有,可以在Linux终端中输入下面的命令:
sudo apt-get install ffmpeg

接下来我们就一步步地制作我们的动画短片(如果在阅读中遇到问题,建议首先阅读mapmate的官方文档):

  1. 加载所需要的软件包


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


    code2.png
  3. 将地震数据制作成一个大的list,list中的每个dataframe对应一帧(我们要360度展示,所以制作了360帧),注意要给每个dataframe添加frameID,frameID就表示该dataframe是来自哪一帧。
    mapmate包中自带了2个很有用的数据集。一个是bathymetry(海洋深度数据),另一个是borders(国境线)。和地震数据类似,我们也把它们制作成360帧。


    【R图秀-12】地震来了_第4张图片
    code3.png
  4. save_map函数是mapmate的核心,我们可以先画第一帧数据(代码中加注释的部分),看看效果如何:
    海洋深度:


    【R图秀-12】地震来了_第5张图片
    bath_0001.png

    国境线:


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

    地震点:
    【R图秀-12】地震来了_第7张图片
    earthquake_0001.png

    如果没有问题,我们就继续制作剩下的359帧。为了加快速度,我用了mclapply函数,利用32个CPU同时计算:
    【R图秀-12】地震来了_第8张图片
    code4.png
  5. save_map生成的是背景透明的png文件,我们可以把bath,border和earthquake图像作为3个图层merge在一起。这里用的是ImageMagick软件的convert工具。


    【R图秀-12】地震来了_第9张图片
    imagemagick_home.png

    merge后的效果:


    【R图秀-12】地震来了_第10张图片
    merge_0001.png

    最后用ffmpeg将所有图像制作成一个gif文件。
    代码如下:
    code5.png
  6. 除了地球模式,mapmate还可以制作平面地图,我们可以将上面的代码稍作修改:


    code6.png

    【R图秀-12】地震来了_第11张图片
    code7.png

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


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

欢迎大家继续关注【R图秀】!


【R图秀-12】地震来了_第13张图片
qrcode.jpg

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