R for map (1)
(2)maptools
这一篇我们要用maptools包
http://cran.r-project.org/web/packages/maptools/index.html
在统计之都的这篇博客http://cos.name/2009/07/drawing-china-map-using-r/
下载中国地图的GIS数据,这是一个压缩包,完全解压后包含三个文件(bou2_4p.dbf、bou2_4p.shp和bou2_4p.shx)。(#关于shapefile可参考R语言数据混搭(4))
把bou2_4p.shp读进来
library(maptools)
china_map<-readShapePoly("bou2_4p.shp")
plot(china_map)
这样得到包含重庆市的中国地图。
在绘制地图时,每个区域都是用一个多边形来表示的。这个GIS数据,其实就是提供了每个区域其多边形逐点的坐标,然后R软件通过依次连接这些坐标,就绘制出了一个多边形区域。此数据中,一共包含了925个多边形的信息,之所以有这么多是因为一些省份有岛屿,这些岛屿也构成单独的多边形。在这 925个多边形中,序号分别从0到924。
了解这个数据集的信息:
x<-china_map@data
head(x)
这其实是bou2_4p.dbf中存储的信息,之前虽然读取的是bou2_4p.shp文件,但在默认情况下会把dbf文件的信息也放到变量之中。china_map@data是个数据框,925行,7列。第1,2列为区域面积和周长,第7列为省的名字。
了解省的名称:
as.character(na.omit(unique(china_map@data$NAME)))
或者
attributes(china_map@data[,7])
这个数据集中没有澳门,其中编号898的行,省名为NA,但是看面积,不是澳门。
(如果想简单一点,就绘制各省的主要陆地部分,只要在每个省名下取面积最大的观测即可)
关于如何使用maptools包来绘制中国地图,上面引用的博客已经介绍的非常好的。
下面,我结合ggplot2来画。
ggplot(china_map, aes(x = long, y = lat, group = group)) +
geom_polygon(fill = "beige") +
geom_path(colour = "grey40")
这张图还是很简单,没有充分利用数据文件里包含的信息。
试一下str(china_map),就可以看到其数据结构之复杂。
上面的ggplot函数的china_map参数,其实是利用了fortify(china_map),把china_map转化成了一个数据框。
如何利用这个数据集绘制复杂的ggplot2地图,下一篇继续讨论。
这一篇我们要用maptools包
http://cran.r-project.org/web/packages/maptools/index.html
在统计之都的这篇博客http://cos.name/2009/07/drawing-china-map-using-r/
下载中国地图的GIS数据,这是一个压缩包,完全解压后包含三个文件(bou2_4p.dbf、bou2_4p.shp和bou2_4p.shx)。(#关于shapefile可参考R语言数据混搭(4))
把bou2_4p.shp读进来
library(maptools)
china_map<-readShapePoly("bou2_4p.shp")
plot(china_map)
这样得到包含重庆市的中国地图。
在绘制地图时,每个区域都是用一个多边形来表示的。这个GIS数据,其实就是提供了每个区域其多边形逐点的坐标,然后R软件通过依次连接这些坐标,就绘制出了一个多边形区域。此数据中,一共包含了925个多边形的信息,之所以有这么多是因为一些省份有岛屿,这些岛屿也构成单独的多边形。在这 925个多边形中,序号分别从0到924。
了解这个数据集的信息:
x<-china_map@data
head(x)
这其实是bou2_4p.dbf中存储的信息,之前虽然读取的是bou2_4p.shp文件,但在默认情况下会把dbf文件的信息也放到变量之中。china_map@data是个数据框,925行,7列。第1,2列为区域面积和周长,第7列为省的名字。
了解省的名称:
as.character(na.omit(unique(china_map@data$NAME)))
或者
attributes(china_map@data[,7])
这个数据集中没有澳门,其中编号898的行,省名为NA,但是看面积,不是澳门。
(如果想简单一点,就绘制各省的主要陆地部分,只要在每个省名下取面积最大的观测即可)
关于如何使用maptools包来绘制中国地图,上面引用的博客已经介绍的非常好的。
下面,我结合ggplot2来画。
ggplot(china_map, aes(x = long, y = lat, group = group)) +
geom_polygon(fill = "beige") +
geom_path(colour = "grey40")
这张图还是很简单,没有充分利用数据文件里包含的信息。
试一下str(china_map),就可以看到其数据结构之复杂。
上面的ggplot函数的china_map参数,其实是利用了fortify(china_map),把china_map转化成了一个数据框。
如何利用这个数据集绘制复杂的ggplot2地图,下一篇继续讨论。
>library(maptools)
>china_map<-readShapePoly("bou2_4p.shp")
>plot(china_map)
Error in frame() : plot region too large
是怎么回事?
用RSTUDIO画的?
是的。最近新入门R,基础实在不牢……(捂脸)
RSTUDIO的图形窗口太小。一个简单的办法是把它拉大。
晕,原来是这样……
谢谢船长啦!
省名为 [1] "\xba\xda\xc1\xfa\xbd\xadʡ"
怎么办?
是否编码问题?
rgdal package一直打不开,试过了直接从R Studio安装,下载安装包直接解压,下载安装包用R Studio安装,都没有用。。卡在了这里怎么办,两个晚上了。。
> 我来回应