ggplot2中scale_fill_manual仅作用于图例不作用于条形的问题问询
问题原因与解决方法
你遇到的问题本质是fill映射的因子水平和scale_fill_manual里定义的颜色命名不匹配:
- 你当前把
p_value_dif转为因子作为fill映射变量,这个因子的水平是4个不同的p差值:-0.04、-0.03、0.01、0.02 - 但你在
scale_fill_manual里给颜色对应的命名是"Significant"和"Insignificant",和实际因子水平完全对应不上,ggplot无法匹配颜色就会默认填充灰色。
你可以直接用数据框里已经存在的p-value category显著性分组列作为fill映射变量,修正后的完整代码如下:
library(ggplot2) ggplot(df, aes(x=gene, y=p_value_dif, label=p_value_dif)) + geom_bar(stat='identity', aes(fill = as.factor(`p-value category`), # 列名含空格需用反引号包裹 width=0.9)) + scale_fill_manual(name = "legend", # 颜色命名要和因子实际水平一一对应 values = c("sig" = "black", "non-sig" = "orange"), # 可通过labels参数自定义图例显示文本 labels = c("sig" = "Significant", "non-sig" = "Insignificant")) + coord_flip()
补充报错说明
你之前不转as.factor会报错Error: Continuous value supplied to discrete scale,是因为p_value_dif本身是连续数值变量,而scale_fill_manual是专为离散分类变量设计的颜色尺度,二者不兼容导致报错。
内容的提问来源于stack exchange,提问作者Adriana
相关产品推荐
相关产品推荐

