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

浏览: 2993

小蟹君今天又来给大家介绍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包之后,小蟹君尝试绘制了美洲地震分布图:

0.gif

▲美洲地震分布带

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

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

0 (1).gif

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

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

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

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


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

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

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

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

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



▲上海20所高校分布图

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


▲上海市高校分布图

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

3、计算两地间距离

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

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

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

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


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


推荐 0
本文由 datakong 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册