如何为地图中缺失数据的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
相关产品推荐
相关产品推荐

