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

如何在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数据点正常绘制的前提下,仅在图例中隐藏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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 17:17:27