Объединяйте полигоны и рисуйте с помощью spplot()

Я хотел бы объединить некоторые регионы в данных 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"

Теперь я понятия не имею, что может исправить эту ошибку.


person Tomas Greif    schedule 04.03.2013    source источник


Ответы (1)


Я не уверен в том, что вы пытаетесь сделать здесь.

Ошибка связана с тем, что 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, так как я не вижу смысла представлять переменную, где каждое значение кажется уникальным для каждого полигона.

person juba    schedule 04.03.2013
comment
Спасибо, я впервые пытаюсь использовать R для такой цели, и ваш ответ действительно великолепен! - person Tomas Greif; 04.03.2013