SpatialPolygonsDataFrame

SpatialPolygonsDataFrame

我有一个来自于UScensus2010软件包的SpatialPolygonsDataFrame。我正在尝试创建一个choropleth。当我这样做时,它将按预期工作:

data(colorado.county10)
choropleth(colorado.county10,
           "P0010001",
           color = list(fun = "rainbow",
                        attr = list(4)),
           main="2010 US Counties",
           type="plot",
           border="black")

但这由于找不到“P0010001”而失败
data(colorado.county10)
ggplot(colorado.county10, aes(long, lat, group = group)) +
  geom_polygon(aes(fill = P0010001), colour = alpha("white", 1/2), size = 0.2) +
  scale_fill_brewer(pal = "PuRd")

当我试图找出答案时,我注意到colorado.county10 $ P0010001返回一个数字数组,但是colorado.county10 [,“P0010001”]返回一个SpatialPolygonsDataFrame。

对正在发生的事情有任何见解吗?

最佳答案

如果要使用ggplot,则需要将其从SpatialPolygonsDataFrame强制转换为data.frame
ggplot2提供了许多fortify方法,这些方法将创建格式正确的数据。

当前,fortify.SpatialPolygonsDataFrame方法不保留data组件,但确实提供了id列,其中包含原始data.framedata插槽内SpatialPolygonsDataFrame的行名。

请注意,data.frames是存储此信息的低效方式(每个多边形的每个顶点1行)。

因此,以下操作将起作用,但速度较慢,并可能导致内存问题

c10 <- fortify(colorado.county10)

c10d <- cbind(c10, colorado.county10@data[c10$id,])

ggplot(c10d, aes(long, lat, group = group)) +
   geom_polygon(aes(fill = factor(P0010001)), colour = alpha("white", 1/2), size = 0.2) +
   scale_fill_brewer(pal = "PuRd")

使用base绘图功能将更快,而且不会占用太多资源。

07-24 09:52