R绘制中国地图 并展示流行病学数据_光环大数据培训机构

来源:互联网 由 光环IT学院 贡献 责任编辑:鲁倩  
http://hadoop.aura-el.com

R绘制中国地图并展示流行病学数据_光环大数据培训机构

流行病学的数据讲究“三间分布”,即人群分布、时间分布和空间分布。其中的“空间分布”最好是在地图上展示,才比较清楚。R软件集统计分析与高级绘图于大成,是最适合做这项工作了。关于地图的绘制过程,谢益辉、邱怡轩和陈丽云等人都早有文章讲述,开R地图中文教程之先河。由于目前指导毕业论文用到,因此研究了一下。本来因为网上教程很多,曾打消了写些文字的计划,但怡轩版主鼓励说“教程者众,整合者鲜”,所以才战胜拖延症,提起拙笔综述整合一下,并对DIY统计GIS地图提出了一点自己的想法。

1 地图GIS数据的来源与R绘制软件包

中国地图GIS数据的官方数据可以在国家基础地理信息中心的网站(http:/\

fgis.nsdi.gov.cn)里面可以免费下载。官方公开的数据包括:地图数据,及居住地、交通、河流等辅助数据。今年6月开始,官方正组织开始制作新版数据。老数据暂时无法下载,读者要自行百度搜索,本文以旧版数据为例。旧版地图数据中部分地名和地市区划已经过时,使用时需注意。

地图数据有4个压缩文件:bou1_4m.zip、bou2_4m.zip、bou3_4m.zip和bou4_4m.zip。bou代表边界的意思,数字1~4代表国家、省、市、县的4级行政划分;4m代表比例是400万分之一,这个比例的图形是公开的。每个文件解压缩后含有两类文件:以字母p结尾的表示多边形数据,用来绘制区域;以字母l结尾的文件是线形数据,用来绘制边界。但是老版数据中,市级数据中缺少绘制区域的多边形数据,让市级分布图的绘制稍麻烦一些,新版中也许会有改进。

用R绘制地图比较简单。比如画一下全国范围的区域,可以用如下代码: library(maptools)mydat =

http://hadoop.aura-el.com

readShapePoly(\

但是,可以看出这样绘制的地图的形状有些扁平。这是因为,在绘图的过程

中,默认把经度和纬度作为普通数据,均匀平等对待,绘制在笛卡尔坐标系上造

成的。其实,地球的球面图形如何映射到平面图上,在地理学上是有一系列不同

的专业算法的。地图不应该画在普通的笛卡尔坐标系上,而是要画在地理学专业

的坐标系上。在这一点上,R的ggplot2包提供了专门的coord_map()函数。所

以推荐R的ggplot2包来绘制地图。

library(ggplot2)mymap = ggplot(data = fortify(mydat)) +

geom_polygon(aes(x = long, y = lat, group = id), colour = \

这次中国地图的形状与百度地图一样了。

ggplot2包的coord_map函数默认的映射类型是mercator。如果有其他需要,

可以使用其他的映射类型来绘制地图,如:

mymap + coord_map(projection = \

coord_map函数的映射类型及其含义可以通过下列代码查询帮助,一般我们

用默认的就可以。

library(mapproj)?mapproject

http://hadoop.aura-el.com

2 GIS地图的数据结构及省市地图的绘制

GIS地图有很多种存储格式,其中shapefile格式(.shp)可以通过R的maptools包打开。其他格式可以去R官网查询相应的软件包。

地图数据基本可以分为点、线、面三种数据,在maptools包内分别有对应的函数来读取(readShapePoints、readShapeLines和readShapePoly函数)。首先以面(poly)型数据介绍。先看代码,通过readShapePoly函数读入省级地图:

library(maptools)mydat = readShapePoly(\

此时,mydat中保存的是各个省/直辖市的多边形面图,数据类型是SpatialPolygonsDataFrame。我们可以:

length(mydat)## [1] 925names(mydat)## [1] \

可以发现mydat中有925条记录,每条记录中含有面积(AREA)、周长(PERIMETER)、各种编号、中文名(NAME)等字段。其中中文名(NAME)字段是以GBK编码的。

这个SpatialPolygonsDataFrame类型并不是真正的data.frame类型,而是一个sp包定义的类,只不过重载了 [] 和 $ 运算符,使得一些行为上与data.frame相类似。

可以进一步统计一下,每个省/直辖市的多边形数目。

http://hadoop.aura-el.com

table(iconv(mydat$NAME, from = \

云南省内蒙古自治区北京市 ## 12 1 1 1 ## 台湾省吉

林省四川省天津市## 57 1 1 1 ## 宁夏回族自治区安

徽省山东省山西省 ## 1 1 86 1 ## 广东省广西壮族自

治区新疆维吾尔自治区江苏省## 154 6 1 5 ## 江西省河

北省河南省浙江省 ## 1 9 1 179 ## 海南省湖

北省湖南省甘肃省## 79 1 1 1 ## 福建省西藏自

治区贵州省辽宁省## 168 1 2 94 ## 重庆市陕

西省青海省香港特别行政区## 1 1 1 53 ## 黑龙江省 ## 1

我的环境是UTF-8,所以需要iconv函数转化一下才能正常显示。

结果显示多数省的地图都是由一个多边形构成,少数临海省/直辖市由于有

很多附属岛屿,多边形数目比较多。

利用与data.frame相似的 [] 和 $ 运算符操作,我们可以迅速提取出一个

省市的数据,比如上海及附属崇明岛:

Shanghai = mydat[mydat$ADCODE99 == 310000,]plot(Shanghai)

http://hadoop.aura-el.com

其中ADCODE99是国家基础地理信息中心定义的区域代码,共有6位数字,

由省、地市、县各两位代码组成。

为了进一步在ggplot2包中绘图,需要把SpatialPolygonsDataFrame数据

类型转化为真正的data.frame类型才可以。ggplot2包专门针对地理数据提供

了特化版本的fortify函数来做这个工作:

head(fortify(Shanghai))## long lat order hole piece group

id## 1 121.3 31.85 1 FALSE 1 208.1 208## 2 121.3 31.85 2 FALSE 1 208.1 208## 3 121.3 31.85 3 FALSE 1 208.1 208## 4 121.3 31.85 4 FALSE 1 208.1 208## 5 121.3 31.84 5 FALSE 1 208.1 208## 6 121.4 31.83 6 FALSE 1 208.1 208

3 在地图上展示流行病学数据

3.1 一地名对应一区域,长沙为例

首先把长沙所辖地区找到,这个可以根据ADCODE99编码的前4位定位长沙,

去查表就可以了。但是这个地名是99年的标准,新版正在制定过程中,随时会

变。我们权且以此为例。如果找不到表,可以通过代码在命令行下手工查找:

mydat = readShapePoly(\

0 110100 110112 110113 110221 110224 110226 110227 (820000)

这样我们就知道了长沙ADCODE99编码的前4位是4301,其中43代表湖南

以下内容为系统自动转化的文字版,可能排版等有问题,仅供您参考:

光环大数据--大数据培训&人工智能培训 http://hadoop.aura-el.com R 绘制中国地图 并展示流行病学数据_光环大数据培训机构

流行病学的数据讲究“三间分布” ,即人群分布、时间分布和空间分布。其 中的“空间分布”最好是在地图上展示,才比较清楚。R 软件集统计分析与高级 绘图于大成,是最适合做这项工作了。关于地图的绘制过程,谢益辉、邱怡轩和 陈丽云等人都早有文章讲述,开 R 地图中文教程之先河。由于目前指导毕业论文 用到,因此研究了一下。本来因为网上教程很多,曾打消了写些文字的计划,但 怡轩版主鼓励说“教程者众,整合者鲜” ,所以才战胜拖延症,提起拙笔综述整 合一下,并对 DIY 统计 GIS 地图提出了一点自己的想法。 1 地图 GIS 数据的来源与 R 绘制软件包

中 国 地 图 GIS 数 据 的 官 方 数 据 可 以 在 国 家 基 础 地 理 信 息 中 心 的 网 站 (http://nfgis.nsdi.gov.cn)里面可以免费下载。官方公开的数据包括:地图 数据,及居住地、交通、河流等辅助数据。今年 6 月开始,官方正组织开始制作 新版数据。老数据暂时无法下载,读者要自行百度搜索,本文以旧版数据为例。 旧版地图数据中部分地名和地市区划已经过时,使用时需注意。

地图数据有 4 个压缩文件:bou1_4m.zip、bou2_4m.zip、bou3_4m.zip 和 bou4_4m.zip。bou 代表边界的意思,数字 1~4 代表国家、省、市、县的 4 级行 政划分;4m 代表比例是 400 万分之一,这个比例的图形是公开的。每个文件解 压缩后含有两类文件:以字母 p 结尾的表示多边形数据,用来绘制区域;以字母 l 结尾的文件是线形数据,用来绘制边界。但是老版数据中,市级数据中缺少绘 制区域的多边形数据,让市级分布图的绘制稍麻烦一些,新版中也许会有改进。

用 R 绘制地图比较简单。比如画一下全国范围的区域,可以用如下代码:

library(maptools)mydat

=

光环大数据 http://hadoop.aura-el.com

光环大数据--大数据培训&人工智能培训 http://hadoop.aura-el.com readShapePoly("maps/bou1/bou1_4p.shp")plot(mydat)

但是,可以看出这样绘制的地图的形状有些扁平。这是因为,在绘图的过程 中,默认把经度和纬度作为普通数据,均匀平等对待,绘制在笛卡尔坐标系上造 成的。其实,地球的球面图形如何映射到平面图上,在地理学上是有一系列不同 的专业算法的。地图不应该画在普通的笛卡尔坐标系上,而是要画在地理学专业 的坐标系上。在这一点上,R 的 ggplot2 包提供了专门的 coord_map()函数。所 以推荐 R 的 ggplot2 包来绘制地图。

library(ggplot2)mymap

=

ggplot(data

=

fortify(mydat))

+

geom_polygon(aes(x = long, y = lat, group = id), colour = "black", fill = NA) + theme_grey()print(mymap + coord_map())

这次中国地图的形状与百度地图一样了。

ggplot2 包的 coord_map 函数默认的映射类型是 mercator。 如果有其他需要, 可以使用其他的映射类型来绘制地图,如:

mymap + coord_map(projection = "azequidistant")

coord_map 函数的映射类型及其含义可以通过下列代码查询帮助,一般我们 用默认的就可以。

library(mapproj)?mapproject

光环大数据 http://hadoop.aura-el.com

光环大数据--大数据培训&人工智能培训 http://hadoop.aura-el.com 2 GIS 地图的数据结构及省市地图的绘制

GIS 地图有很多种存储格式,其中 shapefile 格式(.shp)可以通过 R 的 maptools 包打开。其他格式可以去 R 官网查询相应的软件包。

地图数据基本可以分为点、线、面三种数据,在 maptools 包内分别有对应 的函数来读取(readShapePoints、readShapeLines 和 readShapePoly 函数) 。 首先以面(poly)型数据介绍。先看代码,通过 readShapePoly 函数读入省级地 图:

library(maptools)mydat = readShapePoly("maps/bou2/bou2_4p.shp")

此 时 , mydat 中 保 存 的 是 各 个 省 / 直 辖 市 的 多 边 形 面 图 , 数 据 类 型 是 SpatialPolygonsDataFrame。我们可以:

length(mydat)##

[1]

925names(mydat)##

[1]

"AREA"

"PERIMETER"

"BOU2_4M_" "BOU2_4M_ID" "ADCODE93"## [6] "ADCODE99" "NAME"

可以发现 mydat 中有 925 条记录,每条记录中含有面积( AREA ) 、周长 (PERIMETER) 、各种编号、中文名(NAME)等字段。其中中文名(NAME)字段是 以 GBK 编码的。

这个 SpatialPolygonsDataFrame 类型并不是真正的 data.frame 类型, 而是 一个 sp 包定义的类,只不过重载了 [] 和 $ 运算符,使得一些行为上与 data.frame 相类似。

可以进一步统计一下,每个省/直辖市的多边形数目。

光环大数据 http://hadoop.aura-el.com

光环大数据--大数据培训&人工智能培训 http://hadoop.aura-el.com table(iconv(mydat$NAME, from = "GBK"))## ## 云南省 1 林省 1 徽省 1 内蒙 古自 治 区 1 四川省 1 山东省 86 1 ## 天 津 市 ## 1 ## 宁夏回族自治区 北 京 市 ## 台湾省 上海市 12 吉 57 安 1 广东省 广西壮族自 154 江西省 河 1 海南省 甘 肃 省 ## 1 ## 辽 宁 省 ## 94 ## 青海省 1 香 港 特 别 行 政 区 ## 53 ## 重庆市 福建省 湖 79 西藏自 168 陕 1 黑 龙 江 省 ##

山 西 省 ## 1 ## 江 苏 省 ## 5 ## 浙 江 省 ## 179 ##

治区 新疆维吾尔自治区 6 北省 9 北省 1 治区 1 西省 1 1 1 河南省 1 湖南省 1 贵州省 2

我的环境是 UTF-8,所以需要 iconv 函数转化一下才能正常显示。

结果显示多数省的地图都是由一个多边形构成,少数临海省/直辖市由于有 很多附属岛屿,多边形数目比较多。

利用与 data.frame 相似的 [] 和 $ 运算符操作, 我们可以迅速提取出一个 省市的数据,比如上海及附属崇明岛:

Shanghai = mydat[mydat$ADCODE99 == 310000,]plot(Shanghai)

光环大数据 http://hadoop.aura-el.com

光环大数据--大数据培训&人工智能培训 http://hadoop.aura-el.com

其中 ADCODE99 是国家基础地理信息中心定义的区域代码,共有 6 位数字, 由省、地市、县各两位代码组成。

为了进一步在 ggplot2 包中绘图,需要把 SpatialPolygonsDataFrame 数据 类型转化为真正的 data.frame 类型才可以。ggplot2 包专门针对地理数据提供 了特化版本的 fortify 函数来做这个工作:

head(fortify(Shanghai))## id## 1 121.3 31.85 1 FALSE

long

lat order

hole piece group 2 FALSE

1 208.1 208## 2 121.3 31.85 3 FALSE

1 208.1 208## 3 121.3 31.85 4 FALSE 121.4 31.83

1 208.1 208## 4 121.3 31.85 5 FALSE 1 208.1 208## 6

1 208.1 208## 5 121.3 31.84 6 FALSE 1 208.1 208

3 在地图上展示流行病学数据 3.1 一地名对应一区域,长沙为例

首先把长沙所辖地区找到, 这个可以根据 ADCODE99 编码的前 4 位定位长沙, 去查表就可以了。但是这个地名是 99 年的标准,新版正在制定过程中,随时会 变。我们权且以此为例。如果找不到表,可以通过代码在命令行下手工查找:

mydat

=

readShapePoly("maps/bou4/BOUNT_poly.shp")tmp

=

iconv(mydat$NAME99, from = "GBK")grep("长沙", tmp, value = TRUE)## [1] "长沙县" " 长 沙 市 市 辖 区 "grep(" 长 沙 ", tmp)## [1] 2122

2183mydat$ADCODE99[grep("长沙", tmp)]## [1] 430121 430101## 2368 Levels: 0 110100 110112 110113 110221 110224 110226 110227 ... 820000

这样我们就知道了长沙 ADCODE99 编码的前 4 位是 4301,其中 43 代表湖南

光环大数据 http://hadoop.aura-el.com

光环大数据--大数据培训&人工智能培训 http://hadoop.aura-el.com 省,01 就是长沙市。接着就可以筛选出长沙的地图数据:

Changsha = mydat[substr(as.character(mydat$ADCODE99), 1, 4) == "4301",]mysh = fortify(Changsha, region = 'NAME99')mysh = transform(mysh, id = iconv(id, from = 'GBK'), group = iconv(group, from = 'GBK'))head(mysh, n = 2)## long lat order 1 FALSE hole piece group id##

1 113.1 28.18 28.18 c("x","y") 2 FALSE

1 长沙市市辖区.1 长沙市市辖区## 2 113.1

1 长沙市市辖区.1 长沙市市辖区 names(mysh)[1:2] =

#这句是不得已而为之的黑魔法

接着我们给一串随机数当成是流行病学数据,并用颜色填充到地图上。

myepidat = data.frame(id = unique(sort(mysh$id)))myepidat$rand = runif(length(myepidat$id))myepidat## 宁乡县 0.98076## 2 望城县 0.32123## 3 id rand## 1

浏阳市 0.66957## 4

长 沙 县 0.09655## 5 长 沙 市 市 辖 区 0.19437csmap = ggplot(myepidat) + geom_map(aes(map_id = id, fill = rand), color = "white", map = mysh) + scale_fill_gradient(high = "darkgreen",low = "lightgreen") +

expand_limits(mysh) + coord_map()print(csmap)

接下来的工作就是添加地名,sp 包提供了 coordinates 函数,来计算地图 的中心坐标:

tmp = coordinates(Changsha)print(tmp)##

[,1]

[,2]## 2121

113.2 28.32## 2134 113.7 28.23## 2136 112.8 28.29## 2149 112.3 28.13## 2182 113.0 28.17tmp = as.data.frame(tmp)tmp$names V1 = V2 浏阳市

iconv(Changsha$NAME99, from = 'GBK')print(tmp)## names## 2121 113.2 28.32 长沙县## 2134 113.7 28.23

光环大数据 http://hadoop.aura-el.com

光环大数据--大数据培训&人工智能培训 http://hadoop.aura-el.com ## 2136 112.8 28.29 望城县## 2149 112.3 28.13 宁乡县## 2182

113.0 28.17 长沙市市辖区 csmap + geom_text(aes(x = V1,y = V2,label = names), family = "GB1", data = tmp)

如果需要支持更多字体,可以配合使用 showtext 包。 3.2 内地省份的地市级图的情况

如果国家基础地理信息中心的 GIS 地图数据的地市文件 bou3_4m.zip 中含有 polygon 文件,那么我们就可以根据上一节的内容绘制省内地市级分布图了。官 方恰恰缺少了这个文件, 给绘图造成了麻烦。 解决方案有两个: 一个是另辟蹊径, 从非官方的 www.gadm.org 下载一份 shp 格式的中国地图来绘制;另一个解决方 案是从官方发布的县级地图入手,根据 ADCODE99 编码适当合并,绘制省内地市 分布图,同时利用 bou3_4m.zip 仅存的边界文件绘制边界。

相信官方新版本的 GIS 地图数据会包含旧版本所缺失的这份文件。 目前还是 建议暂时使用 gadm 的省级地图。旧版官方地图信息比较陈旧落后,比如湖南没 有标注出湘西州的规划。 3.3 一地名对应多区域,上海为例

中国很多沿海省/直辖市有很多附属岛屿,导致地名和区域(Polygon)存在 一对多的情况。这种情况下,在 fortify 处理数据的时候一定要特别注意索引与 多边形一一对应,同时又要保持地名信息,黑魔法在代码中:

#

mydat

=

readShapePoly("maps/bou4/BOUNT_poly.shp")Shanghai 1, 2) == '31',]mysh

= =

mydat[substr(as.character(mydat$ADCODE99),

fortify(Shanghai, region = 'NAME99')mysh = transform(mysh, id = iconv(id, from = 'GBK'), group = iconv(group, from = 'GBK'))head(mysh)## lat order hole piece group id## 1 121.2 31.85 1 FALSE long 1

光环大数据 http://hadoop.aura-el.com

光环大数据--大数据培训&人工智能培训 http://hadoop.aura-el.com 崇明县.1 崇明县## 2 121.3 31.85 121.3 31.85 FALSE 3 FALSE 2 FALSE 1 崇明县.1 崇明县## 3 4

1 崇明县 .1 崇明县 ## 4 121.3 31.85 5 FALSE

1 崇明县.1 崇明县## 5 121.3 31.85 6 FALSE

1 崇明县.1

崇明县## 6 121.3 31.84

1 崇明县.1 崇明县# 黑魔法在此

names(mysh)[c(1, 2, 6, 7)] = c("x", "y", "id", "code")myepidat = data.frame(id = unique(sort(mysh$id)))# 随机数字替代数据 myepidat$rand = runif(length(myepidat$id))# 官方地图区划比较落后过时,目前上海是 16 区 1 县,神码“市直辖 5 区”的称呼已经过时。myepidat## rand## 1 上海市市辖区.1 0.21673## 2 上海市市辖区.2 0.74173## 3 市市辖区 .3 0.02462## 4 0.89970## 6 上海市市辖区 .4 0.20619## 5 id 上海

上海市市辖区 .5

南汇县 .1 0.77084## 7

嘉定区 .1 0.21771## 8 崇明县 .2

奉贤县 .1 0.91729## 9 0.02462## 11

崇明县 .1 0.04879## 10

崇明县.3 0.03397## 12

崇明县 .4 0.72591## 13 松江区 .1

崇 明 县 .5 0.72059## 14 0.18296## 16

崇明县 .6 0.43981## 15

金山区.1 0.78371## 17

金山区 .2 0.88552## 18

闵 行 区 .1 0.54186## 19 geom_map(aes(map_id = id,

青 浦 县 .1 0.12003ggplot(myepidat) + fill = rand), map = mysh) +

expand_limits(mysh) + coord_map()

3.4 其他问题

如果需要县级以下的地图 GIS 数据,比如街道、乡村的地图,国家地理信息 中心并不提供。要么去民政部索取,要么自己绘制。

另外,提醒大家,流行病学数据并不是仅仅画在地图上就完事了。针对空间 数据,R 里面有很多空间数据的分析软件包。推荐 Roger S. Bivand 的《Applied Spatial Data Analysis with R》 ,尤其是里面第 11 章“Disease Mapping” ,对 医学背景同学很有益处。 如果能找到一个地理资源环境学院的研究生一同讨论的

光环大数据 http://hadoop.aura-el.com

光环大数据--大数据培训&人工智能培训 http://hadoop.aura-el.com 话就更好了。毕竟,它山之石可以攻玉,我们要承认自己的不足。 4 自己绘制简单的 GIS 地图

在制作流行病学统计地图的过程中,对于很多区、街道、乡村级别的地图, 无法获得 GIS 数据。很多人的做法是到百度地图上用绘图软件摹描出区域线图, 然后再把自己的数据计算成相应颜色,再手工填充颜色绘成统计地图。这个过程 枯燥繁琐,而且数据映射成颜色的时候容易出错。不如把你已经描好的线图,制 成 shp 格式的 GIS 数据地图,分享给大家用。辛苦你一个,幸福千万家。这个过 程其实有专业的 GIS 软件可以做,若你能找到专业人士,就直接“幸福千万家” 了。

如果地图结构简单,我们可以“土法”来做。先去 NIH(美国国立卫生研究 院)网站下载一个免费的图像软件 ImageJ,用来采集地区边界数据。然后再把 采集好的数据在 R 软件里面把像素坐标换算成地理坐标,在利用 R 软件 sp 包和 maptools 的函数整合成 SpatialPolygonsDataFrame,最后保存为 shp 格式的地 图文件。

我们以起点中文网小说《江山美人志》开篇所附地图为例,绘制虚拟世界里 面 “中南郡” 的 GIS 地图。 为了和实际问题类似, 我在地图中画上了参考坐标线。

利用 ImageJ“点”工具,同时按住 Shift 键一次批量多点采样,再点击分 析菜的测量,最后保存结果。

ImageJ 采集的点坐标是位图像素相对坐标, 为了能换算为地理经纬度坐标。 我们先采集图上参考坐标线上的经纬交点坐标,在 R 中建立换算关系:

mg_pos

=

data.frame(x

=

c(103,103,403,403),

y

=

c(75,275,75,275))real_pos = data.frame(x = c(105,105,115,115), y =

光环大数据 http://hadoop.aura-el.com

光环大数据--大数据培训&人工智能培训 http://hadoop.aura-el.com c(27,20,27,20))data_x = data.frame(img = img_pos$x, rel =

real_pos$x)data_y = data.frame(img = img_pos$y, rel = real_pos$y)lm_x = lm(rel~img, data = data_x)lm_y = lm(rel~img, data = data_y)mytrans_x = function(myimg) { predict(lm_x, newdata = data.frame(img = predict(lm_y, newdata =

myimg))}mytrans_y = function(myimg) { data.frame(img = myimg))}

然后,再利用 ImageJ 软件对中南郡的每个区域轮廓线单独描边采样,这样 做的缺点就是两个区域相邻边会有些不一致,出现小幅的咬合错位现象,但这个 对美观影响不大。优点是大大节省时间。

把每个区域的边界保存在单独的文件中。然后在 R 中把这些数据转化为 GIS 数据,保存为 shp 格式的标准地图文件。关于代码中函数的意义及范例(比我的 代码更清晰) ,请参考 sp 和 maptools 包的帮助文件。

library(maptools)myfiles "Miyaluo.xls", function(x) { tmp = rbind(tmp, tmp[1, ]); tmp$Y tmp = "Woda.xls",

=

c("Jiana.xls", =

"Kutedan.xls", lapply(myfiles,

"Yada.xls")mypolys

tmp = read.table(paste0("data/", x)); tmp$X = mytrans_x(tmp$X); mytrans_y(tmp$Y);

})mynames = sub(".xls$", "", myfiles)names(mypolys) function(x) tmp = mypolys[[x]]; tmp$Y))),

= mynamesmyPolygons = lapply(mynames, { Polygons(list(Polygon(cbind(tmp$X, x)

})mySpn = SpatialPolygons(myPolygons)myCNnames =

c(" 嘉 纳 ", " 库 特 丹 ", " 米 亚 洛 ", " 沃 达 ", " 雅 达 ")myshpdata = SpatialPolygonsDataFrame(mySpn, data = data.frame( Names =

光环大数据 http://hadoop.aura-el.com

光环大数据--大数据培训&人工智能培训 http://hadoop.aura-el.com mynames, CNnames = myCNnames,

row.names = row.names(mySpn)))# 我们要注意到:SpatialPolygonsDataFrame 类的 data 成员的字段是可以自定义的,# 这个是暴露给 names 函数以及$、[] 运算符的。writePolyShape(x = myshpdata, fn = "data/myDIYmap_poly")

这样我们在就成功保存了 shp 格式的地图文件(一共生成三个文件,一个 shp 文件,两个辅助文件) 。生成的地图文件可以留给别人用,也可以正常打开 绘图了。

mydat = readShapePoly("data/myDIYmap_poly.shp")plot(mydat)

可以发现, 在区域相邻的边界, 有咬合分离现象, 这是由于我们采样的时候, 每个区单独描边,产生了共享边的不一致。不过,我们绘制地图是为了展示流行 病学数据,这个误差是可以接受的。

library(ggplot2)mysh

=

fortify(mydat,

region

=

"CNnames")names(mysh)[1:2] = c("x", "y")myepidat = data.frame(id = unique(sort(mysh$id)))myepidat$rand = runif(length(myepidat$id))tmp = coordinates(mydat)tmp = as.data.frame(tmp)tmp$names =

mydat$CNnamesggplot(myepidat) + geom_map(aes(map_id = id, fill = rand), color = "white", map = mysh) + names), family = "GB1", data = tmp)+ low = "yellow") + geom_text(aes(x = V1,y = V2,label = scale_fill_gradient(high = "red",

expand_limits(mysh) + coord_map()

如上,画成统计地图,还算美观。

如果非要消除这种边界交错的不完美,就需要预先制定规划,在位图上分段 采集边界线,再拼接组合成区域轮廓。由于共享边只采集一次,你能得到边界完

光环大数据 http://hadoop.aura-el.com

光环大数据--大数据培训&人工智能培训 http://hadoop.aura-el.com 美的地图。问题是,随着地图区域增多,你将在轮廓的拼接组合上,面临几何级 数增长的复杂度。不过,离开现实的功利和胁迫,去追求完美,不也是推动这个 世界前进的原动力么? 5 小结

尽管我在写作中使用了这个星球上最强大的 knitr 软件包来保证本文的可 重复性,但是随着官方新版数据在未来的发布,数据的字段名称甚至组织布局将 会有些变化,也会使本文代码无法直接拷贝运行。还是希望读者能自己掌握 R, 以无招胜有招。

为什么大家选择光环大数据!

大数据培训、 人工智能培训、 Python 培训、 大数据培训机构、 大数据培训班、 数据分析培训、大数据可视化培训,就选光环大数据!光环大数据,聘请大数据 领域具有多年经验的讲师,提高教学的整体质量与教学水准。讲师团及时掌握时 代的技术,将时新的技能融入教学中,让学生所学知识顺应时代所需。通过深入 浅出、通俗易懂的教学方式,指导学生较快的掌握技能知识,帮助莘莘学子实现 就业梦想。

光环大数据启动了推进人工智能人才发展的“AI 智客计划” 。光环大数据专注国内 大数据和人工智能培训,将在人工智能和大数据领域深度合作。未来三年,光环大数据 将联合国内百所大学,通过“AI 智客计划” ,共同推动人工智能产业人才生态建设,培 养和认证 5-10 万名 AI 大数据领域的人才。

参加“AI 智客计划” ,享 2000 元助学金!

光环大数据 http://hadoop.aura-el.com

光环大数据--大数据培训&人工智能培训 http://hadoop.aura-el.com 【报名方式、详情咨询】 光环大数据网站报名:http://hadoop.aura-el.com 手机报名链接:http:// hadoop.aura-el.com /mobile/

光环大数据 http://hadoop.aura-el.com


  • 与《R绘制中国地图 并展示流行病学数据_光环大数据培训机构》相关:
  • 如何在R绘图中使用中文字体_光环大数据培训机构
  • R语言学习路线图及R数据挖掘包_光环大数据培训机构
  • R做数据分析的有用包的清单_光环大数据培训机构
  • rstatscn, 国家数据库的R接口_光环大数据
  • 中国大数据发展态势_西安光环大数据培训机构
  • 用R语言对城管事件数据分析_光环大数据培训机构
  • 为何入坑数据科学首先要从R语言开始_光环大数据培训
  • 中国人工智能公司排名 光环大数据人工智能培训机构_
  • 为什么R是你下一个要学的编程语言_光环大数据培训机
  • 基于R语言的数据分析和挖掘方法总结_光环大数据培训
  • 本站网站首页首页教育资格全部考试考试首页首页考试首页职业资格考试最近更新儿童教育综合综合文库22文库2建筑专业资料考试首页范文大全公务员考试首页英语首页首页教案模拟考考试pclist学路首页日记语文古诗赏析教育教育资讯1高考资讯教育头条幼教育儿知识库教育职场育儿留学教育高考公务员考研考试教育资讯1问答教育索引资讯综合学习网站地图学习考试学习方法首页14托福知道备考心经冲刺宝典机经真题名师点睛托福课程雅思GREGMATSAT留学首页首页作文
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.xue63.com All Rights Reserved