更改 ggplot geom_bar 中 NA 值的标签和颜色?

use*_*978 2 r legend ggplot2 na geom-bar

我有一个这样的情节:

data <- data.frame(time = c("time1", "time2", "time1"),
                   sex = c("m", "f", NA))

ggplot(data = data) +
  geom_bar(aes(x = time, y = (..count..)/sum(..count..),
               fill = sex),
           position = "fill") +
  scale_y_continuous(name = "percentation",
                     labels = scales::percent)
Run Code Online (Sandbox Code Playgroud)

我正在尝试更改 NA 值的标签和颜色。我用过scale_fill_manual像添加

  scale_fill_manual(labels = c("m" = "male",
                               "f" = "female",
                               "NA" = "unknown"),
                    values = c("m" = "blue",
                               "f" = "red",
                               "NA" = "green"))
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不起作用,所以我想问一下,这里有人可以帮助我解决这个问题吗?是否有特殊的词或其他东西来选择 NA 值?另外,我想保留直接分配,而"m" = "male"不是仅仅通过编写"male"来控制分配。

jan*_*glx 6

NA虽然可以使用颜色/填充比例参数轻松调整值的颜色na.value = ,但指南中的标签需要更多的工作。然而,使用尺度函数参数的非常通用的函数形式,仍然可以在不修改数据的情况下轻松实现:labels

library(ggplot2)
data <- data.frame(time = c("time1", "time2", "time1"), sex = c("m", "f", NA))

ggplot(data = data) +
  geom_bar(aes(x = time, y = after_stat(prop), fill = sex), position = "fill") +
  scale_y_continuous(labels = scales::percent) +
  scale_fill_discrete(
    labels = function(breaks) {breaks[is.na(breaks)] <- "unknown"; breaks},
    na.value = "green"
  )
Run Code Online (Sandbox Code Playgroud)

使用reprex 包(v2.0.1)创建于 2023-03-02