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

如何在ggplot2中保留未填充区域形状进行子集可视化?

ggplot2地理分布图绘制问题及解决过程

初始需求与代码

我正在使用ggplot2绘制本国地理分布图,以下是使用的数据集和脚本(prov2022为地图shapefile):

数据集

#database
COD_REG   COD_PROV   Wage
1         91         530
1         92         520
1         93         410
2         97         300
2         98         205
2         99         501
13        102        700
13        103        800   
13        159        900
18        162        740
18        123        590   
18        119        420
19        162        340
19        123        290   
19        119        120

初始脚本

#script
right_join(prov2022, database, by = "COD_PROV") %>% 
  ggplot(aes(fill = `Wage`))+
  geom_sf(data = ~ subset(., `Wage` > 300 & `Wage` <= 800)) +
  theme_void() +
  theme(legend.title=element_blank())+
  scale_fill_gradientn(colors = c( 'white', 'yellow' , 'red', 'black')) +
  geom_blank()

当前脚本可正常运行,但我希望同时显示被subset命令排除区域的形状:仅对Wage>300且Wage<=800的区域填充渐变色,未满足条件的区域保留轮廓但不填充。请问如何解决?

脚本更新(报错情况)

按照@r2evans的建议,我使用了以下脚本:

right_join(prov2022, database, by = "COD_PROV") %>% 
  ggplot(aes(fill = `Importo medio mensile`))+
  geom_sf(data = ~ transform(., `Importo medio mensile` = ifelse(`Importo medio mensile` > 1500 & `Importo medio mensile` <= 1700, `Importo medio mensile`[NA], `Importo medio mensile`))) + 
  theme_void() +
  theme(legend.title=element_blank())+
  scale_fill_gradientn(colors = c( 'white', 'yellow', 'red', 'black'), na.value = "#00000000") +
  geom_blank()

但出现报错:

Error in FUN(X[[i]], ...) : object 'Importo medio mensile' not found

更新2:切换填充变量后的问题

若我想使用另一个变量Salario reale进行填充,但仍保留基于Importo medio mensile筛选的区域,该如何操作?
仅替换fill变量无法生效:

right_join(prov2022, database, by = "COD_PROV") %>% 
  ggplot(aes(fill = `Salario Reale`))+
  geom_sf(data = ~ dplyr::mutate(., `Importo medio mensile` = ifelse(`Importo medio mensile` > 1500 & `Importo medio mensile` <= 1700, `Importo medio mensile`, `Importo medio mensile`[NA]))) + 
  theme_void() +
  theme(legend.title=element_blank())+
  scale_fill_gradientn(colors = c( 'white', 'yellow', 'red', 'black'), na.value = "#00000000") +
  geom_blank()

所有区域均被着色,仿佛基于Importo medio mensile的筛选未生效,请问如何解决?

更新3:问题解决

@r2evans提出的解决方案生效了!

内容的提问来源于stack exchange,提问作者io_boh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:10:39