5

我正在尝试map2SpatialPolygons在显示美国各州子集的地图中创建内核密度图。我不断收到一条错误消息,说“地图和 ID 的长度不同”。

我知道这段代码有效(来自 map2SpatialPolygons 的帮助):

nor_coast_poly <- map("world", "norway", fill=TRUE, col="transparent", plot=FALSE, ylim=c(58,72))
IDs <- sapply(strsplit(nor_coast_poly$names, ":"), function(x) x[1])
nor_coast_poly_sp <- map2SpatialPolygons(nor_coast_poly, IDs=IDs, proj4string=CRS("+proj=longlat +datum=wgs84"))

此代码也有效(在映射整个美国时):

usmap <- map('usa', fill=TRUE, col="transparent", resolution=0, plot=FALSE)
uspoly <- map2SpatialPolygons(usmap, IDs=usmap$names, proj4string=CRS("+proj=longlat +datum=WGS84"))

但这段代码没有:

states.to.plot=c("illinois", "indiana", "ohio")
dmap<-map("state", regions=states.to.plot, col="transparent", plot=FALSE)
dpoly <- map2SpatialPolygons(dmap, IDs=dmap$names, proj4string=CRS("+proj=longlat +datum=WGS84"))

它抛出错误:

Error in map2SpatialPolygons(dmap, IDs = dmap$names, proj4string = CRS("+proj=longlat +datum=WGS84")) :
    map and IDs differ in length

使用 map("state"...) 时如何获取正确的 ID?

4

1 回答 1

7

来自?map

返回值是一个包含 x、y、范围和名称组件的列表。... 如果 fill 为 FALSE,则 x 和 y 向量是连续折线的坐标,由 NA 分隔。如果 fill 为 TRUE,则 x 和 y 向量具有连续多边形的坐标,再次由 NA 分隔。

因此,使用默认值fill = FALSE,您会得到一堆折线,“一堆”比您要绘制的三个状态多,这就是您收到上述错误的原因。但是,即使使用正确数量的 ID,您仍然会收到错误消息,因为map返回的是折线而不是多边形。

使用fill = TRUE,您将获得您所追求的多边形:

dmap<-map("state", regions=states.to.plot, col="transparent", plot=FALSE, fill = TRUE)

dpoly <- map2SpatialPolygons(dmap, IDs = dmap$names,
  proj4string=CRS("+proj=longlat +datum=WGS84"))
于 2012-06-21T08:12:10.330 回答