使用 ggplot2 在 R 中组合多个地图
Combine multiple maps in R using ggplot2
这是我面临的问题的可重现示例。我正在尝试在多个阶段使用 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")
现在如果我想分多个阶段创建这张地图,我遇到了问题。我只想要县边界作为背景信息(类似于 'recurrent theme'),我将创建多个地图,其中包含州级别不断变化的信息。所以我用县创建了 'background map',效果很好:
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 <- Countmap + geom_polygon(aes(x = long, y = lat, fill = region, group = group), data=border, color = "white")
);但是,这将县置于州界之下。
我也知道这个具体问题有一个简单的解决方案,就是先用州绘制地图,然后在第二阶段将其与县结合起来。然而,在我的真实场景中,这不是一个选项,因为地图的反复出现的主题是需要在第二位绘制的东西:城市和地理边界(就像我这里的县边界)。
这是我要创建的地图:
如果我对你的描述理解正确,你不想合并地图。您想要组合 层 ,特别是在不断变化的州级地图上叠加县轮廓。
试试这个:
# 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
这是我面临的问题的可重现示例。我正在尝试在多个阶段使用 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")
现在如果我想分多个阶段创建这张地图,我遇到了问题。我只想要县边界作为背景信息(类似于 'recurrent theme'),我将创建多个地图,其中包含州级别不断变化的信息。所以我用县创建了 'background map',效果很好:
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 <- Countmap + geom_polygon(aes(x = long, y = lat, fill = region, group = group), data=border, color = "white")
);但是,这将县置于州界之下。
我也知道这个具体问题有一个简单的解决方案,就是先用州绘制地图,然后在第二阶段将其与县结合起来。然而,在我的真实场景中,这不是一个选项,因为地图的反复出现的主题是需要在第二位绘制的东西:城市和地理边界(就像我这里的县边界)。
这是我要创建的地图:
如果我对你的描述理解正确,你不想合并地图。您想要组合 层 ,特别是在不断变化的州级地图上叠加县轮廓。
试试这个:
# 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