指定标签和中断时缺少 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

使用 ggplot2 在小中断处放置轴标签

使用端点/ ggplot的中断计算设置ggplot网格线

R语言ggplot2可视化:自定义设置X轴上的时间间隔(中断以年为单位),使用scale_x_date()自定义设置坐标轴间隔和标签添加标题副标题题注信息

R语言ggplot2可视化:自定义设置X轴上的时间间隔(中断以月为单位),使用scale_x_date()自定义设置坐标轴间隔和标签添加标题副标题题注信息

在ggplot中绘制每月时间序列时出错