ggplot能否叠加两幅shapefile地图?实现工资分区可视化叠加
解决方案
当然可以,而且完全没必要分成两个图来画,两种方法都能实现你要的效果:
方法一:推荐,用分类变量一次性绘制(更简洁)
先给数据加一个工资分类字段,然后用一个图层就能搞定所有区域的填充:
# 合并数据并创建工资分类变量 combined_data <- right_join(prov2022, dataset, by = "COD_PROV") %>% mutate(wage_group = case_when( `Real Wage` < 700 ~ "低于700", `Real Wage` > 700 ~ "高于700", TRUE ~ "等于700" # 处理刚好等于700的区域,设为白色 )) # 绘制叠加后的地图 ggplot(combined_data, aes(fill = wage_group)) + geom_sf() + theme_void() + theme(legend.position = "none") + scale_fill_manual(values = c( "低于700" = "orange", "高于700" = "red", "等于700" = "white" ))
方法二:直接叠加两个图层(贴合你的原始思路)
如果你想保留分图层的逻辑,也可以在同一个ggplot里叠加两个geom_sf,只需要做一次数据连接:
# 先合并一次数据 data_joined <- right_join(prov2022, dataset, by = "COD_PROV") # 先画低于700的区域,再叠加高于700的区域 plot_combined <- ggplot(data_joined) + geom_sf(aes(fill = `Real Wage` < 700), show.legend = FALSE) + geom_sf(aes(fill = `Real Wage` > 700), show.legend = FALSE) + theme_void() + scale_fill_manual(values = c("white", "orange", "white", "red"))
两种方法都能实现你要的“高于700的红色区域叠加在低于700的橙色区域之上”的效果,方法一更清晰,还能减少重复代码。
内容的提问来源于stack exchange,提问作者io_boh
相关产品推荐
相关产品推荐

