如何修改plot_usmap绘制的美国地图中status为3、4的州的颜色与边框
需求实现方案
这个需求完全可以实现,通过手动指定填充色映射、叠加双图层即可达到你要的「未纳入统计」展示效果,以下是修正后的可运行代码及说明:
注:原代码中
rep(1:4)长度仅为4,和50个州的长度不匹配,以下代码已修正该问题,你可以替换为自己的真实数据。
library(usmap) library(ggplot2) # 构造示例数据,可替换为你的真实数据 state <- datasets::state.name # 修正长度匹配问题,生成50个州的status值 status <- sample(1:4, 50, replace = TRUE) map <- data.frame(state, status) # 第一步:先绘制底层所有status为3、4的州,设置深边框+灰色填充 base_map <- plot_usmap(data = map[map$status %in% c(3,4), ], color = "gray30", # 自定义深边框色 fill = "gray80") # 自定义灰色填充色 # 第二步:叠加status为1、2的州,保留原有配色、白色边框 mapus <- base_map + geom_sf(data = usmap_transform(map[map$status %in% c(1,2), ]), aes(fill = factor(status)), color = "white", inherit.aes = FALSE) + # 手动指定填充色,前两色匹配原Pastel1调色板,3、4统一为灰色 scale_fill_manual(values = c("1" = "#FBB4AE", "2" = "#B3CDE3", "3" = "gray80", "4" = "gray80"), name = "X", # 可选:取消下一行注释即可隐藏图例中的3、4分类 # breaks = c("1","2"), na.translate = FALSE) + # 添加州名缩写标签,和原需求效果一致 geom_sf_text(data = us_map("states"), aes(label = abbr), color = "black") + theme(legend.position = "top") + ggtitle("X") # 输出地图 print(mapus)
代码说明
scale_fill_manual手动配置不同status值对应的填充色,将3、4统一设置为灰色,符合未纳入统计的展示要求- 采用双图层叠加逻辑:底层先渲染3、4类的州(深边框+灰填充),上层叠加1、2类的州(正常配色+白边框),避免统一设置边框导致的样式冲突
- 你可以自行调整
color = "gray30"的色值控制边框深浅,调整fill = "gray80"的色值控制灰色填充的深浅 - 如果要更换1、2类的配色,直接修改
scale_fill_manual里的前两个色值即可
内容的提问来源于stack exchange,提问作者Bani Antonio
相关产品推荐
相关产品推荐

