【问题标题】:scale_fill_manual is only applying to the legend and not barsscale_fill_manual 仅适用于图例而不适用于条形图
【发布时间】: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”,我会得到以下信息: 错误:提供给离散刻度的连续值

【问题讨论】:

    标签: ggplot2 colors geom-bar


    【解决方案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")
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-15
      • 2016-09-22
      • 2021-02-20
      • 1970-01-01
      • 1970-01-01
      • 2018-01-28
      • 1970-01-01
      • 2010-10-09
      相关资源
      最近更新 更多