R绘制地图原理:

R使用一个个多边形(polygon)来表示每个区域,通过顺次连接GIS数据提供的每个区域多边形的坐标来逐点绘制这些多边形,所以理论上只要得到GIS数据就可绘制相应的地图。

地图绘制说明:

  • 必须使用完整的中国地图(包含台湾及南海九段线);
  • R中大部分包对于中国地图支持不佳,论文发表中需手动添加清楚明确的南海九段线。

1.maps包

R中内置地图包。但是这个包中的中国地图缺乏台湾、西沙、南沙群岛,所以不要拿来做中国地图。

  1. library(maps)
  2. map('usa')
  3. map('usa',regions = "Massachusetts")
  4. map('state',interior = F)
  5. map('state',boundary = F,lty=2,add = T)
  6. map('state',fill=T,col = rainbow(200))
  7. map('county','washington, san',names=T,plot = F)
  8. map('state',xlim = range(ozone$x),ylim = range(ozone$y))
  9. #经纬度范围
  10. text(ozone$x,ozone$y,ozone$median)
  11. box()

  1. #标记每个区域失业率
  2. data(unemp)
  3. data(county.fips)
  4. colors=c("#F1EEF6",'#D4B9DA','#C994C7','#DF65B0','#DD1C77','#980043')
  5. unemp$colorBuckets <- as.numeric(cut(unemp$unemp,c(0,2,4,6,8,10,100)))
  6. leg.txt <- c('<2%','2-4%','6-8%','8-10%','>10%')
  7. colorsamtched <- unemp$colorBuckets[match(county.fips$fips,unemp$fips)]
  8. map('county',col=colors[colorsamtched],fill=T,resolution = 0,lty=0)
  9. #调用projection映射到专业地图坐标系
  10. map('county',col=colors[colorsamtched],fill=T,resolution = 0,lty=0,
  11. projection = 'polyconic')
  12. #添加图例
  13. leg.txt <- c('<2%','2-4%','6-8%','8-10%','>10%')
  14. legend('topright',leg.txt,horiz = F,fill = colors)
  15. title('2009年美国各市失业情况')

2. 从本地导入GIS地图

mapdata包和maptools包导入GIS地图数据。

  1. library(mapdata)
  2. library(maps)
  3. map('china')



虽然这个包的中国地图版图完整,但提供的GIS信息比较旧,如重庆和四川没分开等。

maptools包可读入shapefile格式数据(最常见的地图文件格式)。

中国地图GIS数据可从GADM数据库下载(https://gadm.org/download_country_v3.html)如下图,选择shapefile或R格式:



或从国家基础地理信息中心(http://www.ngcc.cn/ngcc/

)下载shapefile文件(但我没找到)。

  1. library(sp)
  2. #sp包提供了处理空间数据的类和方法
  3. library(maptools)
  4. library(plyr)
  5. library(ggplot2)
  6. #读入地图数据
  7. china.map <- readShapePoly('*.shp')
  8. class(china.map)
  9. plot(china.map) #仍在笛卡尔坐标系(扁平)
  10. ggplot(china.map,aes(x=long,y=lat,group=group))+
  11. geom_polygon(fill='grey')+
  12. coord_map('polyconic') #投影到专业地图坐标系

3. 利用ggplot2绘制地图

准备地图信息。

  1. #将地图数据转换为数据框(经纬度数据)
  2. china.map1 <- fortify(china.map)
  3. #提取行政区域信息
  4. mymap <- china.map@data #@针对S4对象,类似$(S3对象)
  5. #生成id用于匹配
  6. mymap$id <- c(0:924)
  7. #按id列匹配
  8. china.map2 <- plyr::join(mymap,china.map1)

导入业务数据和绘制地图:

如中国各省份公共卫生机构分布数据以及某疾病发病率。

  1. geom_polygon(color='grey')+scale_fill_gradient(low = 'pink',
  2. high = 'red')+
  3. coord_map('ployconic')
  4. p
  5. #给各省份添加标签,仍需获取省份的经纬度
  6. #可通过geocode/getCoordinate从地图软件中获取
  7. p+geom_text(aes(label=Group.1),size=3,data=province_data)+
  8. #去掉灰色网格背景和不必要的经纬度信息
  9. theme(panel.grid = element_blank(),
  10. panel.background = element_blank(),
  11. axis.text = element_blank(),
  12. axis.ticks = element_blank(),
  13. axis.title = element_blank())

还可在地图上添加气泡图、饼图等。

除了绘制中国和世界地图,可从shape文件中获取市级地图GIS数据。

  1. anhui <- subset(china.map2,NAME=="安徽省")
  2. ggplot(anhui,aes(x=long,y=lat,group=group,fill=NAME))+
  3. geom_polygon(color='skyblue',fill='skyblue')

要获取安徽省各个行政区的资料信息,可从GADM数据库中下载包含市级行政区的shapefile文件。

4. 从专业地图软件调用地图

R可调用谷歌、百度等地图数据,但每日API获取次数有限。

一般流程是:

  • 获取经纬度
  • 根据经纬度获得相应地图
  • 按需处理数据和地图对象

ggmap包

R语言与医学统计图形-【29】地图的绘制的更多相关文章

  1. R语言与医学统计图形-【34】绘制统计表格

    表的绘制,主要是临床三线表. 1.tableone包 #install.packages('tableone') library(tableone) set.seed(2017) age <- ...

  2. R语言与医学统计图形【1】par函数

    张铁军,陈兴栋等 著 R语言基础绘图系统 基础绘图包之高级绘图函数--par函数 基础绘图包并非指单独某个包,而是由几个R包联合起来的一个联盟,比如graphics.grDevices等. 掌握par ...

  3. R语言与医学统计图形【6】低级绘图函数

    R语言基础绘图系统 基础绘图包之低级绘图函数--定义坐标轴.图例.文本 低级绘图函数:本身不具备图形绘制能力,只是在已有图形基础上添加元素. 函数 功能 arrows 添加箭头 axis 坐标轴 bo ...

  4. R语言与医学统计图形【5】饼图、条件图

    R语言基础绘图系统 基础图形--饼图.克利夫兰点图.条件图 6.饼图 pie(rep(1,26),col=rainbow(26), labels = LETTERS[1:26], #标签 radius ...

  5. R语言与医学统计图形【4】直方图、金字塔图

    R语言基础绘图系统 基础图形--直方图.金字塔图 3.直方图 参数设置及比较. op <- par(mfrow=c(2,3)) data <- rnorm(100,10,5) hist(d ...

  6. R语言与医学统计图形【3】条形图、误差图

    R语言基础绘图系统 基础图形--条形图.误差图 3.条形图 barplot接收的数据是矩阵而非数据框. data <- sample(c(50:80),5) barplot(data,col=h ...

  7. R语言与医学统计图形【2】散点图、盒形图

    R语言基础绘图系统 基础图形--散点图.盒形图 plot是一个泛型函数(generic method),对于不同的数据绘制不同的图形. par函数的大部分参数在plot中通用. 1.散点图 plot绘 ...

  8. R语言与医学统计图形【8】颜色的选取

    R语言基础绘图系统 基础绘图包之低级绘图函数--内置颜色. 1.内置颜色选取 功能657种内置颜色.colors() 调色板函数:palette(), rgb(), rainbow(). palett ...

  9. R语言与医学统计图形【7】低级绘图函数

    R语言基础绘图系统 基础绘图包之低级绘图函数--气泡图.一页多图.背景网格.添加线条和散点.数学表达式 4.气泡图 symbols是高级绘图函数,可在图上添加标记,标记的形状包括:circles,sq ...

随机推荐

  1. java中延时队列的使用

    最近遇到这么一个需求,程序中有一个功能需要发送短信,当满足某些条件后,如果上一步的短信还没有发送出去,那么应该取消这个短信的发送.在翻阅java的api后,发现java中有一个延时队列可以解决这个问题 ...

  2. (六)、Docker 之 Dockerfile

    1.什么是Dockerfile Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本. 2.Dockerfile解析过程 前提认知: 每条保留字指令都必须为大写字母 ...

  3. Noip模拟8 2021.6.17

    T1 星际旅行 仔细一看,发现像一个欧拉路(简称一笔画). 满足"可以一笔画"的条件是: 1.所有点都有偶数条连边; 2.有偶数个点连奇数条边; 满足以上两个条件的任意一个即可一笔 ...

  4. Java:检查异常与未检查异常

    一.异常的介绍 Throwable 是 Java 中所有错误和异常的超类.Java 虚拟机仅抛出属于此类(或其子类之一)的实例对象,或者是 throw 语句也可以抛出该对象.同样,catch 子句中的 ...

  5. 第10课 OpenGL 3D世界

    加载3D世界,并在其中漫游: 在这一课中,你将学会如何加载3D世界,并在3D世界中漫游.这一课使用第一课的代码,当然在课程说明中我只介绍改变了代码. 这一课是由Lionel Brits (βtelge ...

  6. 如何选择普通索引和唯一索引《死磕MySQL系列 五》

    系列文章 一.原来一条select语句在MySQL是这样执行的<死磕MySQL系列 一> 二.一生挚友redo log.binlog<死磕MySQL系列 二> 三.MySQL强 ...

  7. [转]技术往事:改变世界的TCP/IP协议

    原文链接 : http://www.52im.net/thread-520-1-1.html 1.前言 作为应用层开发人员,接触最多的网络协议通常都是传输层的TCP(与之同处一层的另一个重要协议是UD ...

  8. Swift-Framework Error(一)桥接文件

    摘要 Xcode 编译工程代码时,出现编译错误时除了红色图标外,还会附送几句英文文本. 常规操作拷贝英文文本,放到搜索框中找答案,但是读懂这几句话能事半功倍. 项目中如果有 OC 和 Swift 两种 ...

  9. 菜鸡的Java笔记 第三十六 - java 函数式编程

    StudyLambda    Lambda 指的是函数式编程,现在最为流行的编程模式为面向对象,很多的开发者并不认可面向对象,所以很多的开发者宁愿继续使用 C 语言进行开发,也不愿意使用java,c+ ...

  10. 基于Guava API实现异步通知和事件回调

    本文节选自<设计模式就该这样学> 1 基于Java API实现通知机制 当小伙伴们在社区提问时,如果有设置指定用户回答,则对应的用户就会收到邮件通知,这就是观察者模式的一种应用场景.有些小 ...