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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 20:50:13