R语言可以这么玩 |绘制地图与地点数据可视化

本期是我们R语言可以这么玩系列第四期。 小蟹君今天又来给大家介绍R的玩法了。这次,我们用R来画地图吧,利用可视化工具,我们更能轻松地得出结论哦~


R语言里的ggmap包是绘制地图的利器。在确保电脑可以上外网的情况下(为了保证进入google地图的URL),ggmap包帮助我们轻松下载google map,再加上和ggplot2制图包的叠加,可以轻松、方便地绘制可视化地图。

 

ggmap包中最常用的函数是ggmap(),该函数用于从网上下载地图。函数基本构成为:

 ggmap(get_googlemap(center=c(lon=-95.3632715,lat=29.7632836),zoom=3,maptype='terrain'))

 

其中,get_googlemap表示从网上获取google地图,center表示地图中心,

zoom表示地图缩放程度,

maptype表示地图种类,可选参数为:’terrain’(地形图)、’satellite’(卫星图)、’roadmap’(道路图)、’hybrid’(混合图)。

配合ggplot包的geom_point()描点函数,我们可以在地图上绘制数据点集。


介绍好了基本函数、小蟹君就带你们一起玩起来啦!~


1、动态地图绘制——以地震数据为例

小蟹君从网上获取了一个世界各地的地震数据集,记录了地震发生的年份、经纬度、震级等指标。利用这部分数据,可以做出不同年份地震发生的动态地图。

想要绘制动态地图,还需要在电脑上安装ImageMagick软件,该软件的功能是将数张静态图组合成为1张gif动态图。在R语言中,animation包可以完成ImageMagick软件与R语言的交互,只需数行代码便可实现动态图的绘制。

在加载了ggmap包、ggplot包、animation包之后,小蟹君尝试绘制了美洲地震分布图:

attachments-2017-05-IS5N868P5907efda0125▲美洲地震分布带

结论:如图所示的动态地图展示了70年代美洲部分地区地震发生地点的变化,点的大小反映地震发生的等级大小。不难发现,地震频发地区为西部临海地区,内陆地区基本不在地震带上。另外海里也时常有地震发生。


现在,让我们再把目光转移到中国上。

attachments-2017-05-zIftGe0U5907f00a6212

▲中国地震分布带(1990-2016)


结论:上面这张动态地图展示了1990年至2016年地震发生的区域。中国东西部差别很大,西部地震频发,而东部几乎没有地震发生。值得注意的是,台湾成为了中国。最频发地震的地区,这也印证了处于各大板块相互作用的边界地区是地震带的主要分布区域。


我们截取了一张2008年的中国地震分布图,

可以看到有一串明显的红点分布在四川汶川附近

attachments-2017-05-GJxGtzS95907f2228f63


2、获取指定地点的经纬度并绘制于地图

ggmap包的强大之处在于它不仅可以获取诸如地形图、卫星图、道路图等多种形式的地图,它还支持给定一个地点名称,计算其经纬度。使用geocode()函数,括号内的参数可以是任意地点名称,函数为我们返回此地点的经纬度。利用这个信息,我们可以轻松地在地图上标注出我们想要标注的地点。


小蟹君以上海各大学的分布图为例给大家展示一下这个功能~

首先获取上海20所大学的英文名称,并把它保存在一个数据框中。可以利用循环函数一次性返回20所大学所处的经纬度,再把它们同时标注在上海道路地图上就好了!

下图是小蟹君得到的结果:

attachments-2017-05-XZZz9iNr5907f235ae63

▲上海20所高校分布图


地图中的每个红点代表一个大学。我们发现,有6所大学分布在上海郊区的位置,这些大学的同学们生活还真是不太方便呢~此外,位于市区里的学校似乎呈现“扎堆”分布的现象,我们把地图放大了看(通过设置zoom参数可以实现地图的缩放):

attachments-2017-05-4b3MTDUe5907f24d3ef4

▲上海市高校分布图


哇,原来上海高校是集群分布的,东北方向一群,西南方向一群,同学们之间交流感情很方便呢~



3、计算两地间距离

最后,小蟹君给大家介绍ggmap包中的另一个有趣的函数,mapdist()。函数的结构如下:

mapdist(from, to, mode = c("driving", "walking", "bicycling"),output = c("simple", "all"))

这个函数可以计算两地之间的距离,并且在给定交通方式”mode”下,可以计算从一地出发前往另外一地的所需时间。比如我们想计算复旦大学到上海交通大学的距离和路途时间,则用:

mapdist(“Fudan University”,”Shanghai Jiaotong University”,mode=”driving”),得到结果:

attachments-2017-05-qpm7vich5907f29456dd

于是我们知道从复旦大学到上海交通大学,路程是43公里,开车的话需要48分钟左右哦。


你还知道R编写的程序吗?小蟹君在后台等你分享哟。


关注微信公众号“易小蟹说统计”,在后台回复“地图”即可获得我们的R代码哦~~





  • 发表于 2017-05-02 10:46
  • 阅读 ( 16076 )
  • 分类:编程语言

0 条评论

请先 登录 后评论
不写代码的码农
易统计

统计专家

3 篇文章

作家榜 »

  1. 祝让飞 118 文章
  2. 柚子 91 文章
  3. 刘永鑫 64 文章
  4. admin 57 文章
  5. 生信分析流 55 文章
  6. SXR 44 文章
  7. 张海伦 31 文章
  8. 爽儿 25 文章