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

如何为地图中缺失数据的geom_polygon_pattern设置白底色蓝条纹?

解决方案:为缺失数据的县添加白色背景蓝色条纹地图

要实现仅缺失数据的县显示白色背景+蓝色条纹,同时保留完整的图例映射,关键是分开控制填充色(背景)和图案条纹色,同时正确处理NA值的美学映射,以下是修改后的可行代码:

library(maps)
library(ggplot2)
library(ggpattern)
library(dplyr) 

data(county.fips)
states <- map_data("state") 

# 示例数据(用户提供)
counties <- structure(list(long = c(-111.050682067871, -111.491851806641, 
-111.5205078125, -111.5205078125, -111.537689208984, -111.577796936035, 
-111.606452941895, -111.606452941895, -111.600723266602, -111.640830993652, 
-111.629364013672, -111.594993591309, -111.600723266602, -111.572067260742, 
-111.577796936035, -111.612174987793, -111.600723266602, -111.594993591309, 
-111.600723266602, -111.617904663086), lat = c(41.9978065490723, 
41.9978065490723, 42.0035362243652, 42.043643951416, 42.0665626525879, 
42.0894813537598, 42.0952110290527, 42.1181259155273, 42.1467742919922, 
42.1926116943359, 42.2556381225586, 42.2728271484375, 42.3186645507812, 
42.3473091125488, 42.3759574890137, 42.4103355407715, 42.4275245666504, 
42.4389839172363, 42.4619026184082, 42.4733619689941), group = c(520, 
520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, 
520, 520, 520, 520, 520, 520), indAnyDisaster_frequency_v2 = structure(c(NA_integer_, 
NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_, 
NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_, 
NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_, 
NA_integer_, NA_integer_, NA_integer_, NA_integer_), levels = c("0", 
"1-2", "3-5", "6-8", "9-12", "13-19"), class = "factor")), row.names = 19621:19640, class = "data.frame")

# 修改后的绘图代码
indAnyDisaster_map_wNA_6groups <- 
  ggplot() + 
  coord_fixed(1.3) + 
  # 处理缺失数据的县:白色背景+蓝色条纹
  geom_polygon_pattern(
    data = filter(counties, is.na(indAnyDisaster_frequency_v2)), 
    mapping = aes(x = long, y = lat, group = group, fill = indAnyDisaster_frequency_v2),
    color = "grey", linewidth = 0.05,
    pattern = 'stripe',
    pattern_density = .01,
    pattern_spacing = .01,
    pattern_colour = '#4292c6',  # 设置条纹为蓝色(和现有配色一致)
    pattern_size = .25,
    na.rm = TRUE
  ) + 
  # 处理非缺失数据的县
  geom_polygon(
    data = filter(counties, !is.na(indAnyDisaster_frequency_v2)), 
    mapping = aes(x = long, y = lat, group = group, fill = indAnyDisaster_frequency_v2),
    color = "grey", size = 0.05,
    na.rm = TRUE
  ) + 
  # 绘制州边界
  geom_polygon(
    data = states, 
    mapping = aes(x = long, y = lat, group = group),
    color = "black", size = 0.1, fill = NA
  ) + 
  theme_bw() +
  theme(
    axis.text = element_blank(),
    axis.line = element_blank(),
    axis.ticks = element_blank(),
    panel.border = element_blank(),
    panel.grid = element_blank(),
    axis.title = element_blank()
  ) +
  labs(title = "All Disaster Types", fill = "Count") +
  # 统一控制fill映射:包含NA项,设置NA的填充色为白色
  scale_fill_manual(
    breaks = c("0", "1-2", "3-5", "6-8", "9-12", "13-19", NA),
    values = c("white","#deebf7","#9ecae1","#4292c6","#08519c", "#08306b", "white"),
    na.value = "white"  # 明确指定NA的填充色
  )

# 查看绘图
print(indAnyDisaster_map_wNA_6groups)

关键修改点说明:

  • 条纹颜色设置:直接在geom_polygon_pattern中固定pattern_colour为目标蓝色,无需映射变量,因为仅缺失数据的县需要条纹。
  • 移除错误scale:删除导致报错的scale_pattern_fill_manual,改用scale_fill_manual统一控制所有填充色,包括NA值的背景色。
  • NA值处理:在scale_fill_manual中通过na.value = "white"明确指定缺失数据的背景色,同时在breaks中保留NA项,确保图例显示完整。
  • 保留图例关联:不单独覆盖geom_polygon_pattern的fill参数,通过scale统一控制,保证fill美学映射和图例的关联正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 09:53:16