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. 在kivy中加图片

    from kivy.app import App from kivy.uix.scatterlayout import ScatterLayout from kivy.uix.image import ...

  2. CentOS 文件管理

    目录 目录管理 目录结构 切换目录 查看目录 创建目录 复制目录 剪切目录 删除目录 文件管理 查看文件 创建文件 复制文件 剪切文件 删除文件 创建链接 目录管理 目录也是一种文件. 蓝色目录,绿色 ...

  3. Java:Set接口小记

    Java:Set接口小记 对 Java 中的 Set接口 与 其实现类,做一个微不足道的小小小小记 概述 public interface Set<E> extends Collectio ...

  4. BUAA软工-结对项目作业

    结对项目作业 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 结对项目作业 我在这个课程的目标是 通过这门课锻炼软件开发能力和经验,强化与他人合作 ...

  5. Python课程笔记(四)

    1.模块的导入 相当于Java的包或C语言的头文件 (1) import math s = math.sqrt(25) print(s) (2) from math import sqrt s=mat ...

  6. ShardingSphere-初见

    目录 概述 认识shardingjdbc shardingjdbc功能架构图 认识Sharding-Proxy 三个组件的比较 ShardingJdbc混合架构 ShardingShpere的功能清单 ...

  7. linux shell文件合并 去重 分割

    1,合并+去重+分割 转载:shell 文件合并,去重,分割 - kakaisgood - 博客园 (cnblogs.com) 第一:两个文件的交集,并集前提条件:每个文件中不得有重复行1. 取出两个 ...

  8. 暴力尝试安卓gesture.key

    import hashlib import os import itertools f = open(r'D:\KEY\gesture.key','r') psd = f.readline() f.c ...

  9. 就因为把int改成Integer,第2天被辞了

    本文节选自<设计模式就该这样学>之享元模式(Flyweight Pattern) 1 故事背景 一个程序员就因为改了生产环境上的一个方法参数,把int型改成了Integer类型,因为涉及到 ...

  10. WPF实现统计图

    WPF开发者QQ群: 340500857  | 微信群 -> 进入公众号主页 加入组织 前言 有小伙伴提出需要实现统计图. 由于在WPF中没有现成的统计图控件,所以我们自己实现一个. PS:有更 ...