使用 ggplot2 在 R 中组合多个地图

Doo*_*gan 2 r ggplot2 ggmap

这是我面临的问题的可重现示例。我正在尝试在多个阶段使用 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"))
Run Code Online (Sandbox Code Playgroud)

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

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") 
Run Code Online (Sandbox Code Playgroud)

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

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

现在我尝试将它与州地图结合起来:

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

这给了我错误:

 Error: Don't know how to add o to a plot
Run Code Online (Sandbox Code Playgroud)

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

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

这是我要创建的地图:

在此处输入图片说明

Z.L*_*Lin 5

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

尝试这个:

# 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
Run Code Online (Sandbox Code Playgroud)

单层图

编辑以回应评论

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

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
Run Code Online (Sandbox Code Playgroud)

多层情节