【问题标题】:Adding entry for NA-values in continous ggplot-legend在连续 ggplot-legend 中为 NA 值添加条目
【发布时间】:2025-12-17 23:55:02
【问题描述】:

这里有一个非常相似的问题:Add NA value to ggplot legend for continuous data map

我试图理解它,但我没有设法让它适用于我的数据。 所以我创建了一个超级简单的例子。我有这些数据:

set.seed(1)
df = data.frame(a=rnorm(50), b=rnorm(50), c=rep(1:5, 10))
df[sample(1:50, 10), ]$c = NA

所有列都是numeric。现在我想为 NA 值制作一个带有图例条目的 ggplot。当我执行以下操作时:

ggplot(df) +
  geom_point(
    aes(x = a, y =b, col=c)
  )

这是结果

我想要的是这样的(当 c 是一个因素时,它会自动获得一个条目):

ggplot(df) +
  geom_point(
    aes(x = a, y =b, col=factor(c))
  )

我能否获得或多或少简单的类似结果并将我的价值观保持在numeric 类中?

【问题讨论】:

  • 我不这么认为;您正在尝试同时具有连续 (c) 和离散 (is.na(c)) 的色标。你能用 shape 来表示 NA 值吗?

标签: r ggplot2


【解决方案1】:

添加scale_color_continuous(na.value="red") 很容易为NA 定义颜色,但图例中没有明确标记。

要实现这一点,您可以使用 ggnewscale 为 NA 值添加第二个色标:

library(ggplot2)
library(ggnewscale)
set.seed(1)
df = data.frame(a=rnorm(50), b=rnorm(50), c=rep(1:5, 10))
df[sample(1:50, 10), ]$c = NA
na.value.forplot <- 'red'
ggplot(df) +
  geom_point(aes(x = a, y =b, col=c)) +
  scale_color_continuous(guide = guide_colorbar(order = 2)) +
  new_scale_color() +
  geom_point(data=subset(df, is.na(c)),
    aes(x=a, y=b, col="red")) +
  scale_color_manual(name=NULL, labels="NA", values="red")

reprex package (v1.0.0) 于 2021 年 3 月 31 日创建

【讨论】: