scale_fill_manual 仅适用于图例而不适用于条形图

Posted

技术标签:

【中文标题】scale_fill_manual 仅适用于图例而不适用于条形图【英文标题】:scale_fill_manual is only applying to the legend and not bars 【发布时间】:2022-01-03 04:50:03 【问题描述】:

我有一个如下所示的数据框 (df):

gene p_value p_value_dif p-value category
a 0.06 0.01 non-sig
c 0.07 0.02 non-sig
d 0.008 - 0.03 sig
e 0.009 - 0.04 sig

我使用以下代码创建了一个发散条形图:

 ggplot(df, aes(x=gene, 
                y=p_value_dif , 
                label=p_value_dif )) + 
 geom_bar(stat='identity', 
          aes(fill= (as.factor(p_value_dif)), 
          width=0.9)  +
  scale_fill_manual("legend", 
                    values = c("Significant" = "black", "Insignificant" = "orange"))+
  coord_flip()

问题是只有我的图例将颜色变为黑色和橙色。条形保持灰色。我该怎么做才能使图例中的颜色与条形图的颜色相匹配?

注意:如果“fill”未设置为“as.factor”,我会得到以下信息: 错误:提供给离散刻度的连续值

【问题讨论】:

【参考方案1】:

问题是您的列p_value_dif 不包含任何值"Significant""Insignificant"。只有这些值将被填充为“黑色”或“橙色”。所有其他值将使用比例的默认na.value 填充。相反,您可以将您的列 p-value.category 映射到填充并设置填充颜色和标签,如下所示:

library(ggplot2)

ggplot(df, aes(x=gene, 
               y=p_value_dif , 
               label=p_value_dif )) + 
  geom_bar(stat='identity', 
           aes(fill= `p-value.category`), 
               width=0.9)  +
             scale_fill_manual("legend", 
                               values = c("sig" = "black", "non-sig" = "orange"),
                               labels = c("sig" = "Significant", "non-sig" = "Insignificant"))+
             coord_flip()

数据

df <- data.frame(
    stringsAsFactors = FALSE,
         check.names = FALSE,
                gene = c("a", "c", "d", "e"),
             p_value = c(0.06, 0.07, 0.008, 0.009),
         p_value_dif = c("0.01", "0.02", "- 0.03", "- 0.04"),
  `p-value.category` = c("non-sig", "non-sig", "sig", "sig")
)

【讨论】:

以上是关于scale_fill_manual 仅适用于图例而不适用于条形图的主要内容,如果未能解决你的问题,请参考以下文章

scale_fill_discrete 和 scale_fill_manual - 图例选项混淆

R Highcharter自定义图例以仅显示某些值

如何为子图有一个共同的图例?

为啥 Slime 检查仅适用于鼠标单击而不适用于键盘命令?

如何更改图例中的标签?

-webkit-font-smoothing 是不是仅适用于 Mac 浏览器,而不适用于 windows?