使用spplot()合并多边形和绘图

时间:2013-03-04 12:43:00

标签: r maptools

我想在gadm数据中合并一些区域,然后绘制地图。到目前为止,我有以下内容:

#install.packages("sp",dependencies=TRUE)
#install.packages("RColorBrewer",dependencies=TRUE)
#install.packages("maptools",dependencies=TRUE)
library(sp)
library(maptools)
#library(RColorBrewer)

# get spatial data
con <- url("http://gadm.org/data/rda/CZE_adm2.RData")
print(load(con))
close(con)

IDs <- gadm$ID_2
IDs[IDs %in% c(11500:11521)] <- "11500"
gadm_new <- unionSpatialPolygons(gadm, IDs)

# plot map
spplot(gadm_new, "NAME_2", col.regions=col, main="Test",colorkey = FALSE, lwd=.4, col="white")

然而,这会导致错误:

Error in function (classes, fdef, mtable)  : 
  unable to find an inherited method for function "spplot", for signature "SpatialPolygons"

现在我不知道什么可以解决这个错误。

1 个答案:

答案 0 :(得分:2)

我不确定你在这里要做什么。

错误是由于spplot用于绘制具有属性的空间对象,即具有关联数据。您的gadm对象属于类SpatialPolygonsDataFrame,因此它定义了可通过插槽gadm@data访问的多边形和关联数据。当您使用UnionSpatialPolygons时,您只会获得一个SpatialPolygons类对象,该对象可以使用plot进行绘制,但不能使用spplot进行绘制:

IDs <- gadm$ID_2
IDs[IDs %in% c(11500:11521)] <- "11500"
gadm_new <- unionSpatialPolygons(gadm, IDs)
plot(gadm_new)

如果要使用spplot,则必须手动合并关联数据,方法与合并多边形的方式相同,然后构建SpatialPolygonsDataFrame。一种方法是:

gadm_new <- gadm
## Change IDs
gadm_new$ID_2[gadm_new$ID_2 %in% c(11500:11521)] <- "11500"
## Merge Polygons
gadm_new.sp <- unionSpatialPolygons(gadm_new, gadm_new$ID_2)
## Merge data
gadm_new.data <- unique(gadm_new@data[,c("ID_2", "ENGTYPE_2")])
## Rownames of the associated data frame must be the same as polygons IDs
rownames(gadm_new.data) <- gadm_new.data$ID_2
## Build the new SpatialPolygonsDataFrame
gadm_new <- SpatialPolygonsDataFrame(gadm_new.sp, gadm_new.data) 

然后,您可以使用spplot绘制具有关联属性的地图:

spplot(gadm_new, "ENGTYPE_2", main="Test", lwd=.4, col="white")

请注意,这里我只使用了数据的ENGTYPE_2变量,而不是NAME_2变量,因为我没有看到代表变量的点,其中每个值对于每个多边形看起来都是唯一的。