R语言地图可视化:缺失数据区域设为灰色及ggplot报错修复
修复ggplot绘制北卡罗来纳州失业率地图的报错并实现NA区域灰色显示
1. 准备模拟数据
先加载依赖包,用R自带的北卡罗来纳州地理数据,手动给部分区域的失业率设置NA值,还原你的场景:
library(ggplot2) library(sf) # 加载北卡州的矢量数据(sf格式) nc <- st_read(system.file("shape/nc.shp", package="sf"), quiet = TRUE) # 随机给10个县设置失业率缺失值 set.seed(123) nc$unemployment[sample(1:nrow(nc), 10)] <- NA
2. 报错修复与核心实现
之前用ggplot报错,大多是没给NA值指定填充规则,或者数据格式不对。下面是能正常运行且满足需求的代码:
ggplot() + # 绘制地理多边形,绑定失业率作为填充色 geom_sf(data = nc, aes(fill = unemployment), color = "white", linewidth = 0.5) + # 设置颜色刻度,重点给NA值指定灰色 scale_fill_viridis_c( na.value = "gray70", # 这行是实现缺失区域灰色的关键 name = "失业率(%)", option = "plasma" ) + # 优化地图显示效果 theme_minimal() + theme( panel.grid = element_blank(), # 去掉网格线 axis.text = element_blank(), # 隐藏坐标轴文字 axis.title = element_blank() # 隐藏坐标轴标题 ) + labs(title = "北卡罗来纳州失业率分布(缺失数据显示为灰色)")
3. 关键注意点
- 必须在颜色刻度函数(比如
scale_fill_viridis_c、scale_fill_gradient)里设置na.value参数,指定NA区域的颜色。 - 确保你的地理数据是
sf格式,旧的sp对象在ggplot里容易出问题,建议用sf包处理矢量数据。 - 检查
unemployment列是数值型,NA值是真实的缺失值(不是字符串"NA"),否则颜色映射会失效。
4. 可选:leaflet实现同效果
如果需要用leaflet完成需求,参考代码:
library(leaflet) # 创建调色板,指定NA值为灰色 pal <- colorNumeric( palette = "plasma", domain = nc$unemployment, na.color = "gray70" ) leaflet(nc) %>% addTiles() %>% addPolygons( fillColor = ~pal(unemployment), color = "white", weight = 1, fillOpacity = 0.8, popup = ~paste0(NAME, "<br>失业率: ", ifelse(is.na(unemployment), "缺失", unemployment), "%") ) %>% addLegend( pal = pal, values = ~unemployment, title = "失业率(%)", position = "bottomright" )
内容的提问来源于stack exchange,提问作者stats_noob
相关产品推荐
相关产品推荐

