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

如何修改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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:45:03