不知道各位平常有没有过需要画地图的需求,有的时候需要在地图上标出特定位置的数据表现或者一些数值,然而怎么实现?

这里主要介绍下在R语言中绘制地图的个人琢磨的思路。绘制地图步骤有三:

  1. 你得需要绘制地图;(约等于废话)
  2. 你得有要绘制地图的地理信息,经纬度啊,边界啊等等;
  3. 你得利用2的数据在R中画出来。

以上步骤中,目前最关键的是2,一旦2的数据有了,在R中不就是把它们连起来嘛,这个对于R来说就是调戏它,就跟全民调戏小黄鸡一样。

R语言中绘制地图的思路也是由于2的获取方式不一样而分开的。

第一种思路:有一些R包中存储着常见地图的数据,比如maps包中存有世界地图、美国地图、美国各州郡地图、法国地图以及加拿大城市地图等,加载了这个包,就可以轻松愉快地绘制上述地图。mapdata包中存有中国地图的数据,但是比较旧了,这个数据,重庆还没有从四川分出来呢。

总体来讲,第一种思路受包中已有的数据数量限制(但我R包多!),如果各个包中都没有梵蒂冈的信息,那咋办啊(其实可以通过绘制世界地图,然后限制区域把梵蒂冈画出来)。而且,如果我想画中国人民大学的地图怎么办???哭……

第二种思路:我先去一个地方下载所画图的地理数据,然后读入R进行绘制。比如由于mapdata中的中国地图比较久远了,谢老大的《终于搞定中国分省市地图》一文中就介绍了,先从国家基础地理信息中心下载中国各省市的地理数据,之后再绘制。后来肖凯老师又介绍googleVis包也可以按照这个思路来绘制地图,具体可参考《利用googleVis包实现环境数据可视化》(友情提示,需科学上网)。之后的OpenStreetMap包也是提供了方便下载地理数据的途径。

如您所看到的,第二种途径的步骤稍多,不利于大家上手。我知道,如果过程越长,越艰辛,最终绘制出地图的那一刻的快感就越强烈,但是“少折腾”的指示,还是提醒我们,尽量化繁为简。于是第三种的思路,就是既继承了第一种思路简洁的操作方式,又吸取了第二种思路的数据来源广泛的优势。

第三种思路:既然R是自由的,那我能不能直接去调取专业的地图企业或者网站的数据呢,这样就不会受包中数据集所限,我只需要有一个途径去专业的地图供应商那取数据就可以了,比如Google Map,Baidu Map等,这可都是专业的地图网站,里面的地理数据应有尽有,想取啥取啥。自由的R只需要连接Google Map的API,一切就都有了,当然Google大爷不会让你无限制的取数据,目前的限制是2000次(应该是单天的限制),于是ggmap包诞生了,两位作者David Kahle和 Hadley Wickham真是太会解放全球人民了,并且该包中有几个让我无比激动的命令,下文见!!!

好,我们先来按照第一种思路来画几个图:

1、 画世界地图

如果是首次使用,需要在R中装载maps包(install.packages('maps')),这个包中存有世界地图和美国地图的地图数据,所以,几行代码便可以画出世界地图。

代码如下:

library(maps)
map("world", fill = TRUE, col = rainbow(200),ylim = c(-60, 90), mar = c(0, 0, 0, 0))
title("世界地图")

无比绚丽的世界,引无数骚客竞折腰啊……

2、 画美国地图

同样在maps包中包含了美国地图和美国各州郡的详细地图数据,同样的,也可以用简单的代码画出美国地图,便于我们使用。

代码如下:

library(maps)
map("state", fill = TRUE, col = rainbow(209),mar = c(0, 0, 2, 0))
title("美国地图")

整体形状这是像啥啊,山姆大叔……

对于美国地图,该包提供画出指定几个州的图,比如这里只画出New York, New Jersey, Penn三州的地图:

代码如下:

library(maps)
map('state', region = c('new york', 'new jersey', 'penn'),fill = TRUE, col = rainbow(3), mar = c(2, 3, 4, 3))
title("美国三州地图")

3、 画中国地图

上述的maps包中并没有中国地图的数据 ,在另外一个包mapdata中有中国地图的数据(比较旧的数据)。

代码如下:

library(maps)
library(mapdata)
map("china", col = "red4", ylim = c(18, 54), panel.first = grid())
title(" 中国地图")

好,我们来强力介绍ggmap包,先来说下该包让我惊讶的几个命令:

1、geocode()

比如:

> geocode("Beijing")lon      lat
1 116.4075 39.90403

这大哥可以返回一个地方的经纬度,那我再调戏之:

> #这意思就是大哥你多给点!!
> geocode("Renmin University of China", output = "more")lon      lat              type     loctype
1 116.3184 39.96998 point_of_interest approximateaddress
1 renmin university of china, 59号 zhongguancun street, haidian, beijing, china, 100086north    south     east     west postal_code country
1 39.97853 39.96142 116.3345 116.3024      100086   chinaadministrative_area_level_2 administrative_area_level_1 locality
1                        <NA>                     beijing  beijingstreet streetNo          point_of_interest
1 zhongguancun street       NA renmin university of chinaquery
1 Renmin University of China

信息给多了,我说几个点,不但有人民大学的经纬度,还有该大学的详细地址(中国人民大学,中关村大街59号,海淀,北京,中国),还有邮编好吧100086!!!!但是好像跟我们实际的100872有差距(倒是跟10086很接近啊),但是它确实是返回了邮政编码,还有zhongguancun street就不说了……这完全就是返回的Google地图存储的人民大学的信息啊……

2、mapdist()

第二个颠颤颤的命令式mapdist()。比如:

> mapdist('China Agricultural University',
+     'Renmin University of China', 'walking')from                         to    m    km
1 China Agricultural University Renmin University of China 6022 6.022miles seconds  minutes    hours
1 3.742071    4523 75.38333 1.256389

1 mile = 1609米。

这意思就是说从农大到人大距离6022米,如果您步行,需要4523秒……汗,我下次考虑下步行试试。不过,您说的是农大东校区还是农大西校区啊……

另,ggmap包中不仅仅可以调取Google Map的数据,还可以调取OpenStreetMap (‘osm’)、Stamen Maps (‘stamen’)和CloudMade maps (‘cloudmade’)。亲,这够用了吧。那地图的表现形式也是个性化的,有’terrain’(地势图)、’satellite’(卫星图)、’roadmap’(道路图)和 ‘hybrid’(混合)等。您自个儿选。

其他的不谈了,直接画地图:

1、中国地图

library(ggmap)
library(mapproj)
## Google啊Google给我China的地图数据吧
map <- get_map(location = 'China', zoom = 4)
ggmap(map)

再来北京道路地图:

#Google啊Google给我Beijing的公路地图数据吧
map <- get_map(location = 'Beijing', zoom = 10, maptype = 'roadmap')
ggmap(map)

最后,我想看下大冬天的有没有人在人民大学的各个楼顶上晒太阳浴:

## Google啊Google给我RUC的卫星地图数据吧
map <- get_map(location = 'Renmin University of China', zoom = 14,maptype = 'satellite')
ggmap(map)

太不清楚了,根本看不清楚哪跟哪啊。就这么着吧,我估计快够当天限制数了。

最后来个正经的,借用肖凯老师编好的代码(肖老师的原文后面还有用谢老大animation包做的动态图呢),从中国地震数据中心下载 2013.1.5-2013.1.11 这一周发生在中国的小地震,呃,应该都是小地震,因为没有听到相关的大地震的新闻报道。

从这图上看,每周发生在我亲爱的祖国上的地震真心不少啊,我大台湾也饱受其苦啊。向天祈祷,让地震少震我中国吧……

来源:网络

R语言时代,你要怎样画地图?相关推荐

  1. R语言使用循环语句一次性画出多幅图

    R语言使用循环语句一次性画出多幅图 首先加载包,patchwork用来一个界面展示多幅图 具体的可以看这篇文章 library(ggplot2) library(patchwork) 以数据iris为 ...

  2. R语言学习丨散点图怎么画?绘图基本知识与常用函数

    今天笔记的内容是R语言中散点图绘制方法,用到了plot(普通散点图).pairs(散点图矩阵)函数. 散点图是指在回归分析中,数据点在直角坐标系平面上的分布图,散点图表示因变量随自变量而变化的大致趋势 ...

  3. R语言/Python 将地址标记在地图上

    R语言实现 首先是将地址转换为经纬度坐标 这个可以用在线经纬度查询,直接百度在线经纬度,就可以使用 比如 批量查询 或者用百度.高德等API 参考:https://mp.weixin.qq.com/s ...

  4. R语言学习:用ggplot2画折线图

    本文是个人学习笔记 想把图画做的好看一点,于是学习了一下R语言里的ggplot包. 一.数据集 因为我需要画三个组的平均数据,首先要对每个组的被试数据进行平均,然后这样摆放数据: group bloc ...

  5. R语言绘制ROC曲线如何画在一个图中

    $library("pROC") data(aSAH) 加载R语言自带的数据 roc1 <- roc(myData$label, myData$score) roc2 < ...

  6. 手把手教你使用R语言建立COX回归并画出列线图(Nomogram)

    列线图,又称诺莫图(Nomogram),它是建立在回归分析的基础上,使用多个临床指标或者生物属性,然后采用带有分数高低的线段,从而达到设置的目的:基于多个变量的值预测一定的临床结局或者某类事件发生的概 ...

  7. R语言 空间权重矩阵 foreclosures芝加哥地图

    一.含空间自回归误差的空间自回归模型 模型中的空间邻接权重矩阵需给定,给定方式见使用步骤. 二.使用步骤 1.引入库 install.packages("rgdal", rgdal ...

  8. R语言 将多条生存曲线画到一起(不是拼图) ,一张图绘制多条生存曲线

    网上找破了头都没找到这个办法,只找到一堆拼图的办法 其实方法很简单,survival包自带这个函数:ggsurvplot_combine() library(survival) library(sur ...

  9. R语言用EnhancedVolcano和ggplot画同一数据的火山图

    getwd() #下载方式有很多,挑自己能下载的办法下载好几个包就好,我们用自带的数据就好 install.packages("SeuratData") devtools::ins ...

最新文章

  1. TreeMap源码分析,看了都说好
  2. [教程]MongoDB 从入门到进阶 (概要 以及 高级索引篇 TimeToLive GeoNear)
  3. android 分区修改工具_Android刷机包制作工具与教程-大神必备
  4. php解析目录函数怎么用,PHP中目录解析函数
  5. verilog 简单module_HDLBits:在线学习 Verilog (二十九 · Problem 140-144)
  6. 容器平台选型的十大模式:Docker、DC/OS、K8S 谁与当先?
  7. 如何从zabbix数据库中获取每日流量最大值
  8. Mnist数据集介绍
  9. 基于Javafx制作的随机抽签软件
  10. 股票预测和股票分析就用FineBI!
  11. Ensembl突变数据描述之(一)——突变物种数据库及预测工具
  12. MATLAB中关于复矩阵的操作,新手易错
  13. 弗雷德里克·特曼:硅谷之父、斯坦福大学前副校长——(转自新浪网)
  14. android数字转汉字大写字母,将数字金额转成汉字大写的
  15. 杜拉拉升职记-选段-如何来定位一家公司以及所谓的中产阶级生活
  16. mpc5125 开发板 基于 核心板
  17. 均值场博弈_平均场博弈论(Mean-field Games)简介
  18. Watershed segmentation 分水岭分割
  19. latex编译原理作业
  20. ‘一体化管理系统’加速集团企业信息化进程

热门文章

  1. 麦克斯韦方程组微分形式
  2. win10 metro app(应用商店中的APP)如何走代理?
  3. MAGSAC:Marginalizing Sample Consensus
  4. 提问的艺术:如何通过提示词让 ChatGPT 更准确地理解你的问题?
  5. 穿越到东汉末年的Jackson
  6. 我的世界服务器娘怎么修改配置,转【教学】Pixelmon配置文件修改指南
  7. 怎么让c语言程序右边对齐,c语言中的对齐方式
  8. 清华、北大、浙大的计算机课程资源集都在这里了(转载自 -- AI科技大本营)
  9. c语言josephus问题循环链表,循环单链表(C语言,无头节点,附约瑟夫杀人问题)...
  10. 数商云电子采购平台解决方案:构建企业采购管理系统业务架构、应用场景