指定标签和中断时缺少 ggplot scale_fill_identity 图例
Posted
技术标签:
【中文标题】指定标签和中断时缺少 ggplot scale_fill_identity 图例【英文标题】:ggplot scale_fill_identity legend missing when specifying labels and breaks 【发布时间】:2021-05-12 06:58:38 【问题描述】:我有这样的数据,我想在数据框(颜色列)中指定我的填充颜色。我希望我的图例显示 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))
【问题讨论】:
【参考方案1】:在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']
【讨论】:
以上是关于指定标签和中断时缺少 ggplot scale_fill_identity 图例的主要内容,如果未能解决你的问题,请参考以下文章
控制单个中断/标签 Facet Grid / ggplot2
R语言ggplot2可视化:自定义设置X轴上的时间间隔(中断以年为单位),使用scale_x_date()自定义设置坐标轴间隔和标签添加标题副标题题注信息
R语言ggplot2可视化:自定义设置X轴上的时间间隔(中断以月为单位),使用scale_x_date()自定义设置坐标轴间隔和标签添加标题副标题题注信息