【问题标题】:Using ggplot to create a choropleth from a SpatialPolygonsDataFrame使用 ggplot 从 SpatialPolygonsDataFrame 创建等值线
【发布时间】:2013-11-18 12:39:42
【问题描述】:

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

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

【问题讨论】:

    标签: r ggplot2 census


    【解决方案1】:

    如果您想使用ggplot,您需要将SpatialPolygonsDataFrame 强制转换为data.frame

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

    目前fortify.SpatialPolygonsDataFrame 方法不保留data 组件,它确实提供了一个列id,其中包含来自原始data 插槽中data.frame 的行名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 绘图函数会更快,并且不会消耗太多资源。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-12
      • 2014-08-09
      • 1970-01-01
      • 1970-01-01
      • 2013-01-16
      • 2022-12-15
      • 2016-01-31
      相关资源
      最近更新 更多