【发布时间】:2017-05-23 01:10:56
【问题描述】:
我想使用 ggplot2 中 get_map 的输出创建一个SpatialPolygonsDataFrame。经过反复试验,我找到了一种方法,但对我来说似乎很复杂。有没有更清洁的方法?
library(ggplot2)
library(sp)
library(plyr)
pnw.df <- map_data("state",region=c("washington","oregon","idaho"))
# delete islands from subregions
pnw.df$subregion[is.na(pnw.df$subregion)] <- "main"
pnw.df <- subset(pnw.df,subregion == "main")
getPolygons <- function(x) {
Polygons(list(Polygon(x[,c("long","lat")])),ID=unique(x$region))
}
pnw.sp <- SpatialPolygons(dlply(pnw.df, .(region), getPolygons))
pnw.sp <- as(pnw.sp,"SpatialPolygonsDataFrame")
proj4string(pnw.sp) <- "+proj=longlat +ellps=WGS84"
plot(pnw.sp)
【问题讨论】:
-
ggplot2::map_data("state")在后台调用maps::map("state", ...)。请查看 Josh O'Brien 的回答 here,以非常方便地将其输出转换为“SpatialPolygons”。