R绘制地图原理:

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

地图绘制说明:

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

1.maps包

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

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

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

2. 从本地导入GIS地图

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

library(mapdata)
library(maps)
map('china')



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

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

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



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

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

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

3. 利用ggplot2绘制地图

准备地图信息。

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

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

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

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

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

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

anhui <- subset(china.map2,NAME=="安徽省")
ggplot(anhui,aes(x=long,y=lat,group=group,fill=NAME))+
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. JDK里常见容器总结

    自己总结.   扩容 线程安全   是否支持null 的key 说明 hashmap 2*length 否   是 1.8以后增加红黑树.提高检索效率 hashtable   是   否 官方不建议使 ...

  2. UltraSoft - Beta - 测试报告

    UltraSoft - Beta - 测试报告 在测试过程中发现了多少Bug?有哪些是Beta阶段的新Bug?有哪些是Alpha阶段没有发现的Bug? 很多Bug在开发阶段就已经经过测试了,我们在Be ...

  3. Makefile目标文件搜索(VPATH和vpath

    转载:http://c.biancheng.net/view/7051.html 我们都知道一个工程文件中的源文件有很多,并且存放的位置可能不相同(工程中的文件会被放到不同的目录下),所以按照之前的方 ...

  4. 猫狗收容所 牛客网 程序员面试金典 C++

    猫狗收容所 牛客网 程序员面试金典 C++ 题目描述 有家动物收容所只收留猫和狗,但有特殊的收养规则,收养人有两种收养方式,第一种为直接收养所有动物中最早进入收容所的,第二种为选择收养的动物类型(猫或 ...

  5. hdu 1394 Minimum Inversion Number(线段树or树状数组)

    题意: 给你N个数,N个数是0~N-1的一个全排列. 要求统计它的所有形式的逆序对的最小值.它的所有形式的意思是,不断将数组开头的第一个数放到数组的最后面. 逆序对:i<j且ai>aj 思 ...

  6. SpirngBoot整合Mybatis Plus多数据源

    导读 有一个这样子的需求,线上正在跑的业务,由于业务发展需要,需重新开发一套新系统,等新系统开发完成后,需要无缝对接切换,当初具体设计见草图. 添加依赖 <!--lombok--> < ...

  7. centos安装pm2报错

    报错信息: /usr/lib/node_modules/pm2/node_modules/chalk/source/index.js:103 ...styles, 这个问题其实很简单,就是npm和no ...

  8. Spring Cloud 生产环境性能优化

    先思考几个问题: 什么是百万并发连接? 什么是吞吐量? 操作系统能否支持百万连接? 操作系统维持百万连接需要多少内存? 应用程序维持百万连接需要多少内存? 百万连接的吞吐量是否超过了网络限制? 百万的 ...

  9. ant生成jmeter测试报告没有数据【已解决】

    1.如下图,在配置build时,到网上找配置文件,配置样式表文件名经常是jmeter-results-detail-report_21.xsl, 3.但是在其他版本可能被不是这个文件名,在jmeter ...

  10. Linux ns 5. IPC Namespace 详解

    文章目录 1. 简介 2. 源码分析 2.1 copy_ipcs() 2.2 ipcget() 2.3 ipc_check_perms() 2.4 相关系统调用 参考文档: 1. 简介 进程间通讯的机 ...