如何在R中为DESeq2分析的柱状图添加p.adj值?
为DESeq2基因计数图添加显著性标记的简便方法
问题描述
已完成DESeq2分析,想要绘制两组特定基因计数对比的箱线图并添加统计显著性。使用
plotCounts()可生成图表,但无法添加DESeq2计算得到的p.adj值。当前代码如下:#Retrieving information for specific gene PDCD1 <- subset(results_dds, row.names(results_dds) == "PDCD1") PDCD1_pvalue <- PDCD1$padj #Capture count data from plotCounts PDCD1_data <- plotCounts(dds, gene="PDCD1", intgroup=c("subtype_group"), returnData = TRUE) #Graph ggplot(PDCD1_data, aes(x = subtype_group, y = count)) + geom_col() + theme_bw() + ggtitle("PDCD1") + theme(plot.title = element_text(hjust = 0.5)) + #?作为R新手,使用
stat_pvalue_manual函数时出现错误:"data should contain group1 and group2 columns",求简便方法为计数图添加DESeq2得到的显著性。
解决方案
方法一:手动添加显著性文本(最简便,适合两组对比)
两组对比场景下,直接用annotate()把DESeq2计算好的校正p值标在图上即可,无需复杂函数。
# 格式化p值为易读格式,比如保留2位有效数字 PDCD1_padj_label <- paste("校正p值 =", signif(PDCD1_pvalue, 2)) ggplot(PDCD1_data, aes(x = subtype_group, y = count)) + geom_boxplot() + # 推荐用箱线图展示数据分布,替换柱形图可换回geom_col() theme_bw() + ggtitle("PDCD1") + theme(plot.title = element_text(hjust = 0.5)) + # 在两组中间上方标注p值,y值可根据数据最大值调整 annotate("text", x = 1.5, y = max(PDCD1_data$count)*1.1, label = PDCD1_padj_label, size = 4)
方法二:正确使用stat_pvalue_manual(适合多组/连线标注)
报错原因是stat_pvalue_manual需要特定结构的数据框,包含group1、group2、p.adj和标注位置列,手动构建该数据框即可解决:
# 先安装并加载ggsignif包(如果未安装) # install.packages("ggsignif") library(ggsignif) # 构建显著性标记所需的数据框 sig_df <- data.frame( group1 = levels(PDCD1_data$subtype_group)[1], # 第一组名称 group2 = levels(PDCD1_data$subtype_group)[2], # 第二组名称 p.adj = PDCD1_pvalue, y.position = max(PDCD1_data$count)*1.1 # 标注的垂直位置 ) ggplot(PDCD1_data, aes(x = subtype_group, y = count)) + geom_boxplot() + theme_bw() + ggtitle("PDCD1") + theme(plot.title = element_text(hjust = 0.5)) + # 添加带连线的显著性标注,自动格式化p值 stat_pvalue_manual(sig_df, label = "校正p值 = {signif(p.adj, 2)}", tip.length = 0.01)
内容的提问来源于stack exchange,提问作者Anna
相关产品推荐
相关产品推荐

