ggplot scale_fill_identity 指定标签和中断时缺少图例

ggplot scale_fill_identity legend missing when specifying labels and breaks

我有这样的数据,我想在其中指定数据框(颜色列)内的填充颜色。我希望我的图例显示 cut_value 列中的值。当我同时指定标签和中断时,图例消失了。如果我只包含标签而不包含中断,图例会显示。但是,我需要指定中断,因为我需要它们在多个图中保持一致,其中数据包括 cut_value 的不同数据范围。如何包含标签和分隔符并显示填充图例?

library(tidyverse)

df <- data.frame(sample = letters[1:6],
                 value = c(1,1.5,NA,3,4, 2)) %>% 
  mutate(cut_value = cut(value, breaks = c(1,2,3,4)),
         color = factor(cut_value, 
                        levels = levels(cut_value),
                        labels = c('darkred', 'orange', 'yellow')),
         color = fct_explicit_na(color, na_level = 'grey85'))

ggplot(df, aes(sample, value))+
  geom_bar(stat = 'identity', aes(fill = color))+
  scale_fill_identity(guide = 'legend',
                      labels = levels(df$cut_value))
                      breaks = levels(df$cut_value))

breaks 中,您需要指定要显示 color 的哪些级别,而不是 cut_value 的哪些级别。在这里,我使用 levels(df$color)[-4].

降低 grey85 级别
ggplot(df, aes(sample, value))+
  geom_bar(stat = 'identity', aes(fill = color))+
  scale_fill_identity(guide = 'legend',
                      labels = levels(df$cut_value),
                      breaks = levels(df$color)[-4])


编辑:如果您有多个 cut_value 范围不同的数据集,您可以按名称而不是按位置删除 grey85 级别。

breaks = levels(df$color)[levels(df$color) != 'grey85']