在ggplot分面条形图中添加p值至分类名旁且不显示于图例
解决方案
1. 按p值显著性排序分类
在数据重塑前,先将taxon列转换为按p值从小到大排序的因子,这样分面会自动按显著性从高到低排列:
taxonFC1 <- taxonFC1 %>% mutate(taxon = fct_reorder(taxon, pvalue))
2. 分面标题显示p值,图例保留原名称
不要直接修改taxon列,而是在facet_wrap中使用labeller函数自定义分面标签,把细菌名称和p值拼接起来,图例会自动沿用原始的taxon名称:
taxonFC1 %>% rename(lfc_time.fT0 = lfc_StatusChronic.ACST0., se_Time.fT0 = se_StatusChronic.ACST0.) %>% pivot_longer(-taxon, names_pattern="(.*)_[Tt]ime\\.f(.*)", names_to = c(".value", "time")) %>% ggplot(aes(x = time, y = lfc, ymin = lfc - se, ymax = lfc + se, fill = taxon)) + geom_bar(stat = "identity") + geom_errorbar(width=.4) + theme(axis.text.x = element_text(angle = 45, hjust = 1)) + scale_fill_brewer(palette="Paired") + xlab("") + ylab("LogFC") + # 自定义分面标签,拼接taxon和pvalue facet_wrap(~taxon, ncol=3, labeller = labeller(taxon = function(x) { # 匹配每个taxon对应的pvalue p_vals <- taxonFC1$pvalue[match(x, taxonFC1$taxon)] paste0(x, " (p-value = ", p_vals, ")") })) + ggtitle("9 taxas") + scale_x_discrete(labels = c("ACs & Chronic", "T1 Vs T0", "T2 Vs T0", "T3 Vs T0", "T4 Vs T0", "T5 Vs T0"))
关键说明
fct_reorder(taxon, pvalue):把taxon转换成因子,排序依据是pvalue的大小,p值越小(越显著)的分类排在前面。labeller函数:单独为分面标题生成带p值的文本,不会影响图例的显示内容,完美解决修改原始列导致图例带p值的问题。
内容的提问来源于stack exchange,提问作者WindSur
相关产品推荐
相关产品推荐

