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

scale_fill_manual is only applying to the legend and not bars

我有一个如下所示的数据框 (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()

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

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

问题是您的列 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")
)