You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 14:27:23