2014-02-22 49 views
1

我正在处理包含所有省份的阿富汗shapefile。我最终想通过地区指挥来绘制一些数据,每个地区都包含几个省(这就是我所说的:http://en.wikipedia.org/wiki/File:Afghanistan_ISAF_Sept2008.jpg)。我对R中的形状文件的处理并不是非常熟悉,但在这个问题上我还没有找到很多教程。是否有可能重新绘制多边形或覆盖RC边界并以这种方式绘制一个choropleth?谢谢。更改/添加空间边界/多边形shapefile R

+1

你有一个查询表,告诉你哪个省的功能在哪个区域命令?你尝试过'rgeos'包中的“gUnion”等功能吗?你能分享你的shapefile吗?你甚至设法读过它吗? – Spacedman

+0

交叉帖子是sociopathic – mdsumner

回答

3

像这样的东西?

代码:

library(rgdal)  # for readOGR(...) 
library(ggplot2) # for fortify(...) and rendering the map 
setwd("<directory with all your files>") 

regional.commands <- read.csv("regional.commands.csv") 

map <- readOGR(dsn=".", layer="afghanistan_province_boundaries_-_34_provinces") 
data <- data.frame(id=rownames([email protected]),[email protected]$Prov34Na) 
data <- merge(data,regional.commands,by="Province") 
map.df <- fortify(map) 
map.df <- merge(map.df,data,by="id", all.x=T) 
map.df <- map.df[order(map.df$order),] 

ggplot(map.df, aes(x=long,y=lat, group=group))+ 
    geom_polygon(aes(fill=RC))+ 
    geom_path(colour="grey70")+ 
    coord_fixed() 

在这个例子中,regional.commands.csv从数据(手动!!!!)组装在ISAF website。该文件只有两列:ProvinceRC(地区命令)。据推测,你已经有了这样的东西,但并不觉得有必要分享它。阿富汗shapefile获得here

说明

的shape文件被读入到使用readOGR(...) R,创建一个 “SpatialPolygonsDataFrame” 对象(map)。该对象有两个主要部分,一个包含多边形边界坐标的多边形部分和一个包含每个多边形信息(例如省名)的数据部分。后者可以使用[email protected]来引用。

每个polgyon都有一个唯一的ID。这些存储在[email protected]的行名称中。因此,首先我们创建一个数据帧data,其中[email protected]的行名称为id[email protected]的相关列(列)的列为Province

data <- data.frame(id=rownames([email protected]),[email protected]$Prov34Na) 

如果您有不同的阿富汗shapefile,[email protected]中的相应列可能会有所不同。

现在我们将其与基于常见Province列的regional.commands数据帧合并。

data <- merge(data,regional.commands,by="Province") 

data现在有3列:ProvinceidRC(区指挥)。有一点需要注意的是,显然,安援部队觉得它最清楚如何拼写阿富汗省的名字。其中一些不是对应于地图属性表中的拼写。因此,您可能需要手动修复该问题...

现在我们使用fortify(...)map创建适合绘图的数据框(map.df)。此数据框有一个id列,所以我们将其与基于iddata合并。

map.df <- merge(map.df,data,by="id", all.x=T) 

最后,这一切都融合搞砸行的顺序,所以我们重新排序在map.df使用顺序列。

map.df <- map.df[order(map.df$order),] 

其余的只是生成图层和渲染图。

+0

这真棒谢谢!我在此期间使用qgis结束了,但这是好多了 – chilland