使用ggplot从SpatialPolygonsDataFrame创建一个等值区

时间:2013-11-18 02:52:05

标签: r ggplot2 census

我有一个来自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。

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

1 个答案:

答案 0 :(得分:2)

如果您想使用ggplot,则需要强制执行SpatialPolygonsDataFramedata.frame

ggplot2提供了许多fortify方法,可以创建格式正确的数据。

目前,fortify.SpatialPolygonsDataFrame方法未保留data组件,它确实提供了一个列id,其中包含data.framedata的rownames原始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绘图功能会更快,而不会咀嚼那么多资源。