如何在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
相关产品推荐
相关产品推荐

