我想在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"
现在我不知道什么可以解决这个错误。
答案 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
变量,因为我没有看到代表变量的点,其中每个值对于每个多边形看起来都是唯一的。