如何在ggplot2中仅隐藏图例中的NA值(保留NA点绘制)
保留NA数据点绘制,同时隐藏图例中的NA项
1. 加载依赖包
先加载dplyr和ggplot2包:
library("dplyr") library("ggplot2")
2. 绘制基础散点图
基于faithful数据集绘制基础散点图,用喷发时长是否超过3分钟作为颜色区分:
faithful %>% ggplot(aes(waiting, eruptions, color = eruptions > 3)) + geom_point()

3. 构造带缺失值的数据集
为分类变量添加随机缺失值,模拟实际数据场景:
faithful_with_missings <- faithful %>% mutate(eruptions_class = ifelse(eruptions > 3, '>3', '<=3'), eruptions_class = ifelse(rbinom(n(), 1, 0.9), eruptions_class, NA_character_)) ## eruptions_class = as.factor(eruptions_class)) # 查看各类别(含NA)的数量 faithful_with_missings$eruptions_class %>% table(exclude = NULL) #> . #> <=3 >3 <NA> #> 89 151 32
4. 初始带缺失值的散点图
用含缺失值的数据集绘图时,图例会自动包含NA项:
ggplot(faithful_with_missings, aes(waiting, eruptions, color = eruptions_class)) + geom_point()

问题需求
能否在保留NA数据点正常绘制的前提下,仅在图例中隐藏NA项?期望效果如下:
解决方案
可以通过指定颜色刻度的breaks参数,只显示非NA的类别,同时NA数据点仍会以默认灰色绘制:
ggplot(faithful_with_missings, aes(waiting, eruptions, color = eruptions_class)) + geom_point() + scale_color_discrete(breaks = c("<=3", ">3"))
如果需要自定义NA点的颜色,也可以用scale_color_manual明确指定:
ggplot(faithful_with_missings, aes(waiting, eruptions, color = eruptions_class)) + geom_point() + scale_color_manual( values = c("<=3" = "#F8766D", ">3" = "#00BFC4"), breaks = c("<=3", ">3"), na.value = "gray50" # 自定义NA点的颜色 )
这两种方法都能保留NA数据点的显示,同时图例中只展示有效的分类项。
内容的提问来源于stack exchange,提问作者Andreas
相关产品推荐
相关产品推荐

