【问题标题】:Combine multiple maps in R using ggplot2使用 ggplot2 在 R 中组合多个地图
【发布时间】:2019-02-08 14:09:12
【问题描述】:

这是我面临的问题的可重现示例。我正在尝试在多个阶段使用 ggplot2 创建地图。这是我面临的问题。 考虑数据border与墨西哥边境美国各州的多边形,以及border.county与这些州县的多边形。以下代码允许您获取数据:

library(maps)
library(ggmap)
library(ggplot2)

USA <- get_googlemap(center = 'usa', zoom = 4,  
                     style = 'administrative|element:labels|visibility:off')

us.df <- map_data("state") 
border <- subset(us.df, 
                 region %in% c("california","arizona","new mexico","texas"))

counties <- map_data("county")
border.county <- subset(counties,
                        region %in% c("california","arizona","new mexico","texas"))

现在我想创建一张地图,其背景是来自 Google 地图的地图,带有州多边形和县边界。如果我执行以下操作,它会很好地工作:

Allmap <- ggmap(USA) + 
  geom_polygon(aes(x = long, y = lat, fill = region, group = group), 
               data=border,  color = "white") +
  geom_polygon(aes(x = long, y = lat,  group = group), 
               data=border.county, fill=NA, color="red") 

现在,如果我想分多个阶段创建此地图,我遇到了问题。我只想要县界的背景信息(作为“反复出现的主题”),我将创建多张地图,其中包含州一级的不断变化的信息。所以我用县创建了“背景地图”,效果很好:

Countmap <- ggmap(USA) + 
  geom_polygon(aes(x = long, y = lat,  group = group), 
               data=border.county, fill=NA, color="red") 

现在我尝试将它与状态图结合起来:

Statmap <- ggmap(USA) + 
  geom_polygon(aes(x = long, y = lat, fill = region, group = group), 
               data=border,  color = "white") + 
  Countmap

这给了我错误:

 Error: Don't know how to add o to a plot

我该如何解决这个问题?我可以用另一种方式组合地图(如:Statmap &lt;- Countmap + geom_polygon(aes(x = long, y = lat, fill = region, group = group), data=border, color = "white"));但是,这将县置于州边界之下。

我也知道这个特定的问题有一个简单的解决方案,只需先用州绘制地图,然后在第二阶段将其与县结合起来。然而,在我的真实场景中,这不是一个选项,因为地图的反复出现的主题是需要在第二位绘制的东西:城市和地理边界(比如我这里的县边界)。

这是我要创建的地图:

【问题讨论】:

    标签: r ggplot2 ggmap


    【解决方案1】:

    如果我正确理解您的描述,您就不想合并地图。您想结合图层,特别是在不断变化的州级地图上覆盖县级轮廓。

    试试这个:

    # define county outlines as a geom_polygon layer
    county.layer <- geom_polygon(aes(x = long, y = lat, group = group),
                                 data = border.county, fill = NA, color = "red")
    
    # add county.layer as the last layer to your state-level map
    Statmap <- ggmap(USA) + 
      geom_polygon(aes(x = long, y = lat, fill = region, group = group), 
                   data=border,  color = "white") +
      county.layer
    
    Statmap
    

    根据评论进行编辑

    如果您要绘制多个县级图层,请将它们放在一个列表中:

    border.county2 <- subset(counties, region %in% c("montana")) 
    
    layer2 <- list(geom_polygon(aes(x = long, y = lat, group = group), 
                                data = border.county2, fill = NA, color = "blue"),
                   geom_polygon(aes(x = long, y = lat, group = group), 
                                data = border.county, fill = NA, color = "red"))
    
    Statmap <- ggmap(USA) + 
      geom_polygon(aes(x = long, y = lat, fill = region, group = group), 
                   data=border,  color = "white") +
      layer2
    

    【讨论】:

    • 谢谢;这在这个例子中工作正常。但是,我有一个问题,因为在实际情况下,我的第一层有多个“子层”;这会产生错误non-numeric argument to binary operator。这是示例:border.county2 &lt;- subset(counties,region %in% c("montana")) layer2&lt;-geom_polygon(aes(x = long, y = lat, group = group), data = border.county2, fill = NA, color = "blue") + geom_polygon(aes(x = long, y = lat, group = group), data = border.county, fill = NA, color = "red")
    • @Doon_Bogan 感谢您的澄清。看看我编辑的答案是否适合你?
    • 是的!谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-27
    • 2017-07-08
    • 2022-01-23
    • 2015-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多