R语言与医学统计图形-【29】地图的绘制
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】地图的绘制的更多相关文章
- R语言与医学统计图形-【34】绘制统计表格
表的绘制,主要是临床三线表. 1.tableone包 #install.packages('tableone') library(tableone) set.seed(2017) age <- ...
- R语言与医学统计图形【1】par函数
张铁军,陈兴栋等 著 R语言基础绘图系统 基础绘图包之高级绘图函数--par函数 基础绘图包并非指单独某个包,而是由几个R包联合起来的一个联盟,比如graphics.grDevices等. 掌握par ...
- R语言与医学统计图形【6】低级绘图函数
R语言基础绘图系统 基础绘图包之低级绘图函数--定义坐标轴.图例.文本 低级绘图函数:本身不具备图形绘制能力,只是在已有图形基础上添加元素. 函数 功能 arrows 添加箭头 axis 坐标轴 bo ...
- R语言与医学统计图形【5】饼图、条件图
R语言基础绘图系统 基础图形--饼图.克利夫兰点图.条件图 6.饼图 pie(rep(1,26),col=rainbow(26), labels = LETTERS[1:26], #标签 radius ...
- R语言与医学统计图形【4】直方图、金字塔图
R语言基础绘图系统 基础图形--直方图.金字塔图 3.直方图 参数设置及比较. op <- par(mfrow=c(2,3)) data <- rnorm(100,10,5) hist(d ...
- R语言与医学统计图形【3】条形图、误差图
R语言基础绘图系统 基础图形--条形图.误差图 3.条形图 barplot接收的数据是矩阵而非数据框. data <- sample(c(50:80),5) barplot(data,col=h ...
- R语言与医学统计图形【2】散点图、盒形图
R语言基础绘图系统 基础图形--散点图.盒形图 plot是一个泛型函数(generic method),对于不同的数据绘制不同的图形. par函数的大部分参数在plot中通用. 1.散点图 plot绘 ...
- R语言与医学统计图形【8】颜色的选取
R语言基础绘图系统 基础绘图包之低级绘图函数--内置颜色. 1.内置颜色选取 功能657种内置颜色.colors() 调色板函数:palette(), rgb(), rainbow(). palett ...
- R语言与医学统计图形【7】低级绘图函数
R语言基础绘图系统 基础绘图包之低级绘图函数--气泡图.一页多图.背景网格.添加线条和散点.数学表达式 4.气泡图 symbols是高级绘图函数,可在图上添加标记,标记的形状包括:circles,sq ...
随机推荐
- Java多线程中的死锁
Java多线程中的死锁 死锁产生的原因 线程死锁是指由两个以上的线程互相持有对方所需要的资源,导致线程处于等待状态,无法往前执行. 当线程进入对象的synchronized代码块时,便占有了资源,直到 ...
- [对对子队]团队任务拆解Alpha
Alpha阶段主要目标 完成游戏场景的基本实现(不要求美术资源) 完成游戏UI的基本实现(不要求美术资源) 制作第一部分的关卡(顺序语句,制作3-5关) 完成第一部分关卡和游戏基本逻辑的测试 任务分解 ...
- 团队任务拆解(alpha)
团队任务拆解(alpha阶段) 项目 内容 班级:2020春季计算机学院软件工程(罗杰 任健) 博客园班级博客 作业:团队任务拆解 团队任务拆解 我们在这个课程中的目标 写出令客户和自己都满意的代码同 ...
- 单源最短路径算法:迪杰斯特拉 (Dijkstra) 算法(二)
一.基于邻接表的Dijkstra算法 如前一篇文章所述,在 Dijkstra 的算法中,维护了两组,一组包含已经包含在最短路径树中的顶点列表,另一组包含尚未包含的顶点.使用邻接表表示,可以使用 BFS ...
- MyBatis源码分析(五):MyBatis Cache分析
一.Mybatis缓存介绍 在Mybatis中,它提供了一级缓存和二级缓存,默认的情况下只开启一级缓存,所以默认情况下是开启了缓存的,除非明确指定不开缓存功能.使用缓存的目的就是把数据保存在内存中,是 ...
- linux tr
转载:tr命令_Linux tr 命令用法详解:将字符进行替换压缩和删除 (linuxde.net) tr命令 文件过滤分割与合并 tr命令可以对来自标准输入的字符进行替换.压缩和删除.它可以将一组字 ...
- hdu 1028 Ignatius and the Princess III(母函数)
题意: N=a[1]+a[2]+a[3]+...+a[m]; a[i]>0,1<=m<=N; 例如: 4 = 4; 4 = 3 + 1; 4 = 2 + 2; 4 = 2 + ...
- 寒武纪加速平台(MLU200系列) 摸鱼指南(一)--- 基本概念及相关介绍
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ...
- MnogoDB唯一索引,稀疏索引
1,单个字段唯一索引 db.collection.createIndex({name:1},{unique:true} 2,多个字段联合索引示例 db.collection.createIndex({ ...
- 第一课 Dubbo背景及原理
1 . 技术背景 Dubbo每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点. Dubbo是一个阿里巴巴开源出来的一个分布式服务框架,致力于 ...