用R软件绘制中国分省市地图_光环大数据培训

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

用R软件绘制中国分省市地图_光环大数据培训

鉴于最近有不少人在讨论用R软件绘制地图的问题,我也就跟着凑了凑热闹,对相应的方法学习了一番。下面的这篇文章是一个初步的介绍,还有很多内容仍在学习和探索中,如果大家有什么意见或建议,我将根据自己学习的情况对文章进行进一步的补充。

在R中绘制地图其实是十分方便的,最直接的办法大概就是安装maps和mapdata这两个包,然后输入下面的命令:

library(maps)library(mapdata)map(\

其中map()函数还可以加上很多参数,在这里就不一一详述,具体的用法只需问号之。然而仔细看一看这张地图你会发现重庆市和四川省仍然是浑然一体,可见该地图的数据应该是有些年头了。

幸运的是,通过谢益辉的这篇博文我们已经可以大体知道该如何操作了,下面就为大家介绍一下具体的步骤。

首先,从这里下载中国地图的GIS数据,这是一个压缩包,完全解压后包含三个文件(bou2_4p.dbf、bou2_4p.shp和bou2_4p.shx),将这三个文件解压到同一个目录下,并在R中设好相应的工作空间,然后安装maptools包,运行如下程序:

library(maptools);x=read.shape('bou2_4p.shp');#下文中会继续用到x 这个变量, #如果你用的是其它的名称, #请在下文的程序中也进行相应的改动。plot(x);

http://hadoop.aura-el.com

【修改】新版本的maptools包不再提供read.shape()函数,请用readShapePoly()代替。

这时一张完整的中国地图就已经画好了。但是在实际使用的过程中,我们往往会根据自己的需要对地图中的某些省份着以特定的颜色,这时就可以通过调节plot命令中的fg参数来予以实现。然而为了清楚地说明这部分的内容,我需要插播一段R绘制地图的原理。

======================传说中的分割线=====================

在绘制地图时,每一个省市自治区或者岛屿都是用一个多边形来表示的。之前的GIS数据,其实就是提供了每一个行政区其多边形逐点的坐标,然后R软件通过顺次连接这些坐标,就绘制出了一个多边形区域。在上面的数据中,一共包含了925个多边形的信息,之所以有这么多是因为一些省份有很多小的附属岛屿。在这925个多边形中,每一个都对应一个唯一的ID,编号分别从1到925。

======================传说中的分割线=====================

回到刚才的话题,plot命令中的fg参数在本例中应该是一个长度为925的向量,其第i个分量的取值就代表了地图中第i个多边形的颜色。一个简单的尝试是运行下面这个命令看看效果:

plot(x,fg=gray(924:0/924));

【修改】新版本的maptools包的绘图参数也有所改变,请将fg换成col。

于是自然就产生了一个问题:如何获取某一个特定地区的ID,进而设置我

http://hadoop.aura-el.com

们想要的颜色?事实上,在变量x中,就已经存储了我们想要的信息。在R中输入“x[[2]]”或“x$att.data”,会得到一个925行7列的数据框,这其实是bou2_4p.dbf这个文件中存储的信息,之前的read.shape()函数虽然读取的是bou2_4p.shp文件,但在默认情况下会把dbf文件的信息也放到变量之中。对于这个数据框,其行名就是每一个区域的ID编号,第一列和第二列分别是面积和周长,最后一列是该区域所属的行政区名,其它的列应该也是一些编号性质的变量。于是,通过查找相应的行政区对应的行名,就可以对fg参数进行赋值了。下面是我编的一个函数,用来生成所需的fg向量:

getColor=function(mapdata,provname,provcol,othercol){

f=function(x,y) ifelse(x %in% y,which(y==x),0);

colIndex=sapply(mapdata$att.data$NAME,f,provname);

fg=c(othercol,provcol)[colIndex+1]; return(fg);}

【修改】地图数据的组织形式有所变化,上面函数中的mapdata$att.data$NAME需要替换为mapdata@data$NAME。

其中mapdata是存放地图数据的变量,在上面的例子中就是x,provname是需要改变颜色的地区的名称,provcol是对应于provname的代表颜色的向量(名称和数字均可),othercol是其它地区的颜色。举例如下:

provname=c(\

注意provname一定要写地区的全称,写法可以参照下面这条命令生成的向量:

http://hadoop.aura-el.com

as.character(na.omit(unique(x$att.data$NAME)));

由此生成的向量有33个元素,少了澳门特别行政区,这是这个数据中的一块瑕疵。在x$att.data的第899行有一个NA,不知道它代表的是否就是澳门。

利用类似的方法就可以根据自己的需要对不同的区域进行着色,下面再举一例。从国家统计局获取2007年我国各地区的人口数据,然后根据人口的多少对各省份进行着色。程序如下:

provname=c(\

4768,845,2816,8127,3762,4514,284,3748,2617,

552,610,2095,2296,693);provcol=rgb(red=1-pop/max(pop)/2,green=1-p op/max(pop)/2,blue=0);plot(x,fg=getColor(x,provname,provcol,\

其中颜色越深的地方代表人口数越多,反之为人口数越少。

此外,在绘制地图的过程中,还有一个比较有用的参数是recs,它是一个由多边形ID组成的向量,表示在地图中只画出这些ID所代表的区域。利用这个参数,就可以画出某一部分的地图,例如下面的例子是我国中部六省的地图:

http://hadoop.aura-el.com

getID=function(mapdata,provname){ index=mapdata$att.data$NAME %in% provname; ids=rownames(mapdata$att.data[index,]);

return(as.numeric(ids));}midchina=c(\

上面的getID()是我编写的一个功能与getColor()类似的函数,用来返回指定省份的ID。

【修改】新版本的maptools包的绘图函数已经取消了recs这个参数,现在要实现这个功能,可以在颜色上把不需要的省份变成白色,其中填充色用col参数,边界颜色用border参数。例如上面的例子可以用下面的函数来实现:

plot(x, col = getColor(x, midchina, rep(\

最后要说的是,在画出的图上仍然可以用points()函数和text()函数加上点和文字,而maptools包中还提供了一个pointLabel()函数,用来解决文本标签的重叠问题。这部分内容请参阅博文:用R画中国地图并标注城市位置,以及避免文本标签重叠:maptools中的pointLabel()。

从以上的内容来看,本文所述的都是一些最基本的绘图方法,还没有对地理信息数据进行更进一步的分析。如果有机会的话,这一主题的下一篇文章将为大家介绍地图数据的组成结构,并说明如何将不同格式的地理数据整合起来,例如如何在上面的地图上绘制出我国的铁路、水系分布等内容。

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

光环大数据--大数据培训&人工智能培训 http://hadoop.aura-el.com 用 R 软件绘制中国分省市地图_光环大数据培训

鉴于最近有不少人在讨论用 R 软件绘制地图的问题, 我也就跟着凑了凑热闹, 对相应的方法学习了一番。下面的这篇文章是一个初步的介绍,还有很多内容仍 在学习和探索中,如果大家有什么意见或建议,我将根据自己学习的情况对文章 进行进一步的补充。

在 R 中绘制地图其实是十分方便的,最直接的办法大概就是安装 maps 和 mapdata 这两个包,然后输入下面的命令:

library(maps)library(mapdata)map("china")

其中 map()函数还可以加上很多参数,在这里就不一一详述,具体的用法只 需问号之。然而仔细看一看这张地图你会发现重庆市和四川省仍然是浑然一体, 可见该地图的数据应该是有些年头了。

幸运的是,通过谢益辉的这篇博文我们已经可以大体知道该如何操作了,下 面就为大家介绍一下具体的步骤。

首先,从这里下载中国地图的 GIS 数据,这是一个压缩包,完全解压后包含 三个文件(bou2_4p.dbf、bou2_4p.shp 和 bou2_4p.shx) ,将这三个文件解压到 同一个目录下,并在 R 中设好相应的工作空间,然后安装 maptools 包,运行如 下程序:

library(maptools);x=read.shape('bou2_4p.shp');#下文中会继续用到 x 这个变量, # 如果你用的是其它的名称,

#请在下文的程序中也进行相应的改动。plot(x);

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

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

【 修 改 】 新 版 本 的 maptools 包 不 再 提 供 read.shape() 函 数 , 请 用 readShapePoly()代替。

这时一张完整的中国地图就已经画好了。但是在实际使用的过程中,我们往 往会根据自己的需要对地图中的某些省份着以特定的颜色, 这时就可以通过调节 plot 命令中的 fg 参数来予以实现。然而为了清楚地说明这部分的内容,我需要 插播一段 R 绘制地图的原理。

======================传说中的分割线=====================

在绘制地图时,每一个省市自治区或者岛屿都是用一个多边形来表示的。之 前的 GIS 数据,其实就是提供了每一个行政区其多边形逐点的坐标,然后 R 软件 通过顺次连接这些坐标,就绘制出了一个多边形区域。在上面的数据中,一共包 含了 925 个多边形的信息, 之所以有这么多是因为一些省份有很多小的附属岛屿。 在这 925 个多边形中,每一个都对应一个唯一的 ID,编号分别从 1 到 925。

======================传说中的分割线=====================

回到刚才的话题,plot 命令中的 fg 参数在本例中应该是一个长度为 925 的 向量,其第 i 个分量的取值就代表了地图中第 i 个多边形的颜色。一个简单的尝 试是运行下面这个命令看看效果:

plot(x,fg=gray(924:0/924));

【修改】新版本的 maptools 包的绘图参数也有所改变,请将 fg 换成 col。

于是自然就产生了一个问题:如何获取某一个特定地区的 ID,进而设置我

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

光环大数据--大数据培训&人工智能培训 http://hadoop.aura-el.com 们想要的颜色?事实上,在变量 x 中,就已经存储了我们想要的信息。在 R 中输 入“x[[2]]”或“x$att.data” ,会得到一个 925 行 7 列的数据框,这其实是 bou2_4p.dbf 这个文件中存储的信息,之前的 read.shape()函数虽然读取的是 bou2_4p.shp 文件,但在默认情况下会把 dbf 文件的信息也放到变量之中。对于 这个数据框,其行名就是每一个区域的 ID 编号,第一列和第二列分别是面积和 周长,最后一列是该区域所属的行政区名,其它的列应该也是一些编号性质的变 量。于是,通过查找相应的行政区对应的行名,就可以对 fg 参数进行赋值了。 下面是我编的一个函数,用来生成所需的 fg 向量:

getColor=function(mapdata,provname,provcol,othercol){ f=function(x,y) ifelse(x %in% y,which(y==x),0);

colIndex=sapply(mapdata$att.data$NAME,f,provname); fg=c(othercol,provcol)[colIndex+1]; return(fg);}

【修改】地图数据的组织形式有所变化,上面函数中的 mapdata$att.data$NAME 需要替换为 mapdata@data$NAME。

其中 mapdata 是存放地图数据的变量,在上面的例子中就是 x,provname 是 需要改变颜色的地区的名称, provcol 是对应于 provname 的代表颜色的向量 (名 称和数字均可) ,othercol 是其它地区的颜色。举例如下:

provname=c(" 北 京 市 "," 天 津 市 "," 上 海 市 "," 重 庆 市 ");provcol=c("red","green","yellow","purple");plot(x,fg=getColor(x,pr ovname,provcol,"white"));

注意 provname 一定要写地区的全称,写法可以参照下面这条命令生成的向 量:

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

光环大数据--大数据培训&人工智能培训 http://hadoop.aura-el.com as.character(na.omit(unique(x$att.data$NAME)));

由此生成的向量有 33 个元素,少了澳门特别行政区,这是这个数据中的一 块瑕疵。在 x$att.data 的第 899 行有一个 NA,不知道它代表的是否就是澳门。

利用类似的方法就可以根据自己的需要对不同的区域进行着色, 下面再举一 例。从国家统计局获取 2007 年我国各地区的人口数据,然后根据人口的多少对 各省份进行着色。程序如下:

provname=c("北京市","天津市","河北省","山西省","内蒙古自治区", "辽宁省","吉林省","黑龙江省","上海市","江苏省", 徽省","福建省","江西省","山东省", 东省", " 浙 江 省 "," 安

" 河南省 "," 湖北省"," 湖南省 "," 广

"广西壮族自治区","海南省","重庆市","四川省","贵州省", " 宁夏回族

"云南省","西藏自治区","陕西省","甘肃省","青海省", 自治区","新疆维吾尔自治区","台湾省",

" 香 港 特 别 行 政 区

");pop=c(1633,1115,6943,3393,2405,4298,2730,3824,1858,7625, 5060,6118,3581,4368,9367,9360,5699,6355,9449, 4768,845,2816,8127,3762,4514,284,3748,2617, 552,610,2095,2296,693);provcol=rgb(red=1-pop/max(pop)/2,green=1-p op/max(pop)/2,blue=0);plot(x,fg=getColor(x,provname,provcol,"white"), xlab="",ylab="");

其中颜色越深的地方代表人口数越多,反之为人口数越少。

此外,在绘制地图的过程中,还有一个比较有用的参数是 recs,它是一个 由多边形 ID 组成的向量,表示在地图中只画出这些 ID 所代表的区域。利用这个 参数,就可以画出某一部分的地图,例如下面的例子是我国中部六省的地图:

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

光环大数据--大数据培训&人工智能培训 http://hadoop.aura-el.com getID=function(mapdata,provname){ index=mapdata$att.data$NAME %in% provname; ids=rownames(mapdata$att.data[index,]); return(as.numeric(ids));}midchina=c(" 河南省 "," 山西省 "," 湖北省 "," 安 徽 省 "," 湖 南 省 "," 江 西 省

");plot(x,recs=getID(x,midchina),fg="green",ol="white",xlab="", ylab="");

上面的 getID()是我编写的一个功能与 getColor()类似的函数, 用来返回指 定省份的 ID。

【修改】新版本的 maptools 包的绘图函数已经取消了 recs 这个参数,现在 要实现这个功能,可以在颜色上把不需要的省份变成白色,其中填充色用 col 参 数,边界颜色用 border 参数。例如上面的例子可以用下面的函数来实现:

plot(x, col = getColor(x, midchina, rep("green", 6), border = "white", xlab = "", ylab = "")

"white"),

最后要说的是,在画出的图上仍然可以用 points()函数和 text()函数加上 点和文字,而 maptools 包中还提供了一个 pointLabel()函数,用来解决文本标 签的重叠问题。这部分内容请参阅博文:用 R 画中国地图并标注城市位置,以及 避免文本标签重叠:maptools 中的 pointLabel()。

从以上的内容来看,本文所述的都是一些最基本的绘图方法,还没有对地理 信息数据进行更进一步的分析。如果有机会的话,这一主题的下一篇文章将为大 家介绍地图数据的组成结构,并说明如何将不同格式的地理数据整合起来,例如 如何在上面的地图上绘制出我国的铁路、水系分布等内容。

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

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

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

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

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

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

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

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


  • 与《用R软件绘制中国分省市地图_光环大数据培训》相关:
  • 用R软件绘制中国分省市地图
  • 什么是数据地图_光环大数据数据分析培训
  • 统计建模与R软件_光环大数据培训机构
  • 中国大数据公司100强名单_光环大数据培训
  • 中国机器人与智能系统院士论坛_光环大数据培训
  • 大数据助力建设数字中国_光环大数据培训
  • 中国大学生实习大数据分析报告_光环大数据培训
  • 中国即将面临大数据人才荒_光环大数据培训
  • 中国企业大数据产业发展现状_光环大数据培训
  • 中国大数据发展态势_西安光环大数据培训机构
  • 本站网站首页首页教育资格全部考试考试首页首页考试首页职业资格考试最近更新儿童教育综合综合文库22文库2建筑专业资料考试首页范文大全公务员考试首页英语首页首页教案模拟考考试pclist学路首页日记语文古诗赏析教育教育资讯1高考资讯教育头条幼教育儿知识库教育职场育儿留学教育高考公务员考研考试教育资讯1问答教育索引资讯综合学习网站地图学习考试学习方法首页14托福知道备考心经冲刺宝典机经真题名师点睛托福课程雅思GREGMATSAT留学首页首页作文
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.xue63.com All Rights Reserved