3

我有一个来自 UScensus2010 包的 SpatialPolygonsDataFrame。我正在尝试创建一个等值线。当我这样做时,这会按预期工作:

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。

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

4

1 回答 1

2

如果要使用ggplot,则需要从 a 强制SpatialPolygonsDataFrame转换为 a data.frame

ggplot2提供了许多fortify方法来创建正确格式化的数据。

目前该fortify.SpatialPolygonsDataFrame方法不保留data组件,它确实提供了一个列id,其中包含来自原始插槽data.frame内的行名。dataSpatialPolygonsDataFrame

请注意,这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绘图功能会更快,并且不会消耗太多资源。

于 2013-11-18T04:39:42.900 回答