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']
我有这样的数据,我想在其中指定数据框(颜色列)内的填充颜色。我希望我的图例显示 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']