如何将一个ggplot地图对象叠加到另一个ggplot地图对象的下层作为背景
实现ggplot图层上下叠加的方案
patchwork默认的+运算符用于多图并排排版,无法实现图层上下堆叠,要把背景图放在下层,两种可行方案如下:
方案1:直接提取背景图的图层叠加到目标图底层
不需要重写绘图逻辑,直接提取你已经做好的back_map的图层,加到p的图层序列最前面即可:
library(ggplot2) library(tidyverse) library(mapdata) library(dplyr) MainStates <- map_data("state") State_Name <- c("alabama","arkansas","arizona","california","colorado") Sales <- c(100,200,250,275,310) df2 <- data.frame(State_Name,Sales) MergedStates <- inner_join(MainStates, df2, by = c("region" = "State_Name")) # 原有背景图 back_map <- ggplot() + geom_polygon(data=MainStates, aes(x=long, y=lat, group=group), color="black", fill="white") # 组合后最终图 p <- ggplot() + # 把背景图的图层加在最前面(自动渲染在下层) back_map$layers[[1]] + geom_polygon(data = MergedStates, aes(x=long, y=lat, group=group), fill = ifelse(MergedStates$Sales <= mean(MergedStates$Sales),"red","green"), size = 0.2) + # 保持地图纵横比不变形,不需要可以删除 coord_fixed(1.3) p
方案2:按图层顺序直接重构绘图逻辑
更直观的写法是在同一个ggplot对象里按「先下后上」的顺序添加geom,先加全量州的背景多边形,再加有销售数据的前层多边形:
p <- ggplot() + # 先加下层:所有州的背景 geom_polygon(data=MainStates, aes(x=long, y=lat, group=group), color="black", fill="white") + # 再加上层:仅匹配到销售数据的州 geom_polygon(data = MergedStates, aes(x=long, y=lat, group=group), fill = ifelse(MergedStates$Sales <= mean(MergedStates$Sales),"red","green"), size = 0.2) + coord_fixed(1.3) p
内容的提问来源于stack exchange,提问作者Rob Rosene
相关产品推荐
相关产品推荐

