绘制地图
1.ggplot2提供了一些工具,让使用maps包绘制的地图与其他ggplot2图形的结合变得十分方便。关于中国地图的绘制可以参考:http://cos.name/2009/07/drawing-china-map-using-r/
国家 | maps地图数据名 |
法国 意大利 新西兰 美国(郡) 美国(州) 美国(边界) 全世界 |
france italy nz country state usa world |
我们使用地图数据主要有两种原因:1.为空间数据添加参考轮廓线2.通过不同的区域填充颜色以构建等值线图。
添加地图边界可以通过borders()来完成。函数的前两个参数指定了要绘制的地图名map以及其中的具体区域region,其余的参数用于控制边界的外观。填充颜色的多边形使用的是fill。
1
2
3
4
|
> library (maps)
> data (us.cities)
> big_citi <- subset (us.cities,pop > 500000) ##人口大于50万的城市
> qplot (long,lat,data=big_citi) + borders ( "state" ,size=0.5)
|
1
2
|
> tx_city <- subset (us.cities,country.etc== "TX" )
> ggplot (tx_city, aes (long,lat)) + borders ( "county" , "texas" ,colour= "grey70" ) + geom_point (colour = "black" ,alpha=0.5)
|
德克萨斯州的城市区划:
使用map_data将地图数据转化为数据框,此数据框可以在之后通过merge() 操作与我们的数据相融合,最终绘制处等值线图。
1
2
3
4
5
6
7
8
9
|
> states <- map_data ( "state" )
> arrests <- USArrests > names (arrests) <- tolower ( names (arrests))
> arrests$region <- tolower ( rownames (USArrests))
> choro <- merge (states,arrests,by= "region" )
#由于绘制多边形时涉及顺序问题,且merge破坏了原始排序,故将行重新排序 > choro <- choro[ order (choro$order),]
> qplot (long,lat,data=choro,group=group,fill=assault,geom= "polygon" )
|
#######################华丽的分割线############################
接下来简单介绍一下中国地图的绘制。
首先要成功安装好两个包:
1
2
|
> install.packages ( "maps" )
> install.packages ( "mapdata" )
|
然后加载:
1
2
|
> library (maps)
> library (mapdata)
|
加载成功后我们可以使用map方法绘制中国地图:
1 |
> map ( "china" )
|
以上的地图比较老了(重庆仍然在四川省内),获取比较新的,下载中国GIS数据(http://cos.name/wp-content/uploads/2009/07/chinaprovinceborderdata_tar_gz.zip),解压到我的文档中(默认的R工作空间),然后下载maptools包:install.packages("maptools"),加载到R的工作空间:library(maptools),然后绘制地图:
1
2
|
> x <- readShapePoly ( 'bou2_4p.shp' )
> plot (x)
|
通过调节plot命令中的col(旧版为fg)参数来根据自己的需要对地图中的省份着以特定的颜色。
GIS数据包含925个多边形,col参数应该时一个长度为925的向量,第i个分量的取值就代表了地图中第i个多边形的颜色:
1 |
> plot (x,col= gray (924:0/924))
|
在地图中只画出部分省份所代表的区域:
请发表评论