使用ggplot从SpatialPolygonsDataFrame创建色度图

3

我有一个SpatialPolygonsDataFrame,它来自UScensus2010包。我试图创建一张区域填充图。当我这样做时,效果和预期的一样:

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。

对此有何见解?

1个回答

2
如果您想使用ggplot,则需要将SpatialPolygonsDataFrame转换为data.frameggplot2提供了许多fortify方法来创建正确格式的数据。目前,fortify.SpatialPolygonsDataFrame方法不保留data组件,但它提供了一个包含原始SpatialPolygonsDataFramedata槽内data.frame的行名的id列。请注意,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") 

使用基本绘图函数会更快,而且不会占用太多资源。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接