如何用ggplot2为列着色并将NA值设置为特定颜色
解决方案
这里提供两种程序化实现的方法,无需手动指定所有颜色或使用scale_fill_manual:
方法一:将NA转换为明确的因子类别
通过forcats包的fct_explicit_na函数自动识别name列中的NA值,将其转换为独立因子水平,ggplot会自动为所有类别(包括这个新水平)分配不同颜色:
# 加载forcats包(未加载时执行) library(forcats) # 自动转换NA为指定因子水平 random_joined <- random_joined %>% mutate(name = fct_explicit_na(name, na_level = "无关联国家")) # 绘图 ggplot(random_joined) + geom_sf(aes(fill = name)) + theme_minimal()
方法二:直接指定NA值的颜色
使用scale_fill_discrete的na.value参数,无需修改原始数据,直接为NA值单独设置颜色,其他国家名称对应的点会自动分配离散颜色:
ggplot(random_joined) + geom_sf(aes(fill = name)) + scale_fill_discrete(na.value = "gray50") # 可替换为任意目标颜色,比如"red" theme_minimal()
两种方法的差异:
- 方法一会将NA转为正常类别,图例中会显示对应的名称;
- 方法二保留NA的原始状态,仅单独设置其颜色,图例中NA项会使用指定颜色显示。
内容的提问来源于stack exchange,提问作者arkriger
相关产品推荐
相关产品推荐

