用R软件绘制中国分省市地图
2012-12-18 14:47
375 查看
最近要对数据用地图形式展现,查看了R的功能,从统计之都上摘录瑞安方法。
【注】新版本的
鉴于最近有不少人在讨论用R软件绘制地图的问题,我也就跟着凑了凑热闹,对相应的方法学习了一番。下面的这篇文章是一个初步的介绍,还有很多内容仍在学习和探索中,如果大家有什么意见或建议,我将根据自己学习的情况对文章进行进一步的补充。
在R中绘制地图其实是十分方便的,最直接的办法大概就是安装
幸运的是,通过[url=http://yihui.name/cn/2007/09/china-map-at-province-level/]plot(x,fg=gray(924:0/924));[/code]
【修改】新版本的
于是自然就产生了一个问题:如何获取某一个特定地区的ID,进而设置我们想要的颜色?事实上,在变量x中,就已经存储了我们想要的信息。在R中输入“
【修改】地图数据的组织形式有所变化,上面函数中的
其中
注意
由此生成的向量有33个元素,少了澳门特别行政区,这是这个数据中的一块瑕疵。在
利用类似的方法就可以根据自己的需要对不同的区域进行着色,下面再举一例。从国家统计局获取2007年我国各地区的人口数据,然后根据人口的多少对各省份进行着色。程序如下:
【注】新版本的
maptools包对很多函数进行了修改,对于修改的内容,文章中用红色的文字进行了说明。
鉴于最近有不少人在讨论用R软件绘制地图的问题,我也就跟着凑了凑热闹,对相应的方法学习了一番。下面的这篇文章是一个初步的介绍,还有很多内容仍在学习和探索中,如果大家有什么意见或建议,我将根据自己学习的情况对文章进行进一步的补充。
在R中绘制地图其实是十分方便的,最直接的办法大概就是安装
maps和
mapdata这两个包,然后输入下面的命令:
map()函数还可以加上很多参数,在这里就不一一详述,具体的用法只需问号之。然而仔细看一看这张地图你会发现重庆市和四川省仍然是浑然一体,可见该地图的数据应该是有些年头了。
幸运的是,通过[url=http://yihui.name/cn/2007/09/china-map-at-province-level/]plot(x,fg=gray(924:0/924));[/code]
【修改】新版本的
maptools包的绘图参数也有所改变,请将
fg换成
col。
于是自然就产生了一个问题:如何获取某一个特定地区的ID,进而设置我们想要的颜色?事实上,在变量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,provname,provcol,"white"));
注意
provname一定要写地区的全称,写法可以参照下面这条命令生成的向量:
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-pop/max(pop)/2,blue=0); plot(x,fg=getColor(x,provname,provcol,"white"),xlab="",ylab="");
相关文章推荐
- 用R软件绘制中国分省市地图
- 用R软件绘制中国分省市地图
- 用R软件绘制中国分省市地图
- 用R软件绘制中国分省市地图
- 用R软件绘制中国分省市地图
- raphael.js绘制中国地图 地图绘制方法
- .NET基础示例系列之十七:VML绘制中国地图
- [Echarts可视化] 一.入门篇之简单绘制中国地图和贵州地区
- Echarts绘制中国地图
- SVG 绘制可交互的中国地图
- 一个让echarts中国地图包含省市轮廓的技巧
- 关于grads中国地区地图绘制
- d3.js——绘制静态中国地图
- NCL中绘制中国任意省份的精确地图
- raphael.js绘制中国地图 地图绘制方法
- 用echarts.js制作中国地图,点击对应的省市链接到指定页面
- R软件绘制中国省际区域图--傻瓜教程
- 如何使用 D3 绘制中国地图/省地图/市地图
- NCL绘制中国地图
- 【zz】ncl绘制中国地图(shapefile添加)