好久不见呀,最近忙着投期刊。今天比较有空来,跟大家分享一下如何读懂火山图,以及对应的代码实现。
差异表达分析是转录组研究中的核心环节,而火山图(Volcano Plot)作为一种直观的可视化工具,能够帮助我们直观看到具有显著表达变化的基因。
火山图的应用场景
火山图主要用于差异表达基因(DEGs)的筛选。它通过横纵坐标分别展示基因表达变化的倍数(log2 Fold Change)和统计学显著性(-log10 p-value),将大量基因数据浓缩在一张图中。
在RNA-seq、蛋白质组学等分析中,火山图可帮助研究者快速识别两类关键基因:
-
显著上调基因 :表达量大幅增加且p值显著 -
显著下调基因 :表达量大幅降低且p值显著
火山图怎么看?
1 横坐标(X轴) :log2 Fold Change,数值绝对值越大,基因表达变化越显著
-
正值(右侧):实验组上调基因 -
负值(左侧):实验组下调基因
2 纵坐标(Y轴) :-log10(Adj p-value),数值越高,统计学意义越显著
3 阈值线 :
-
垂直线(X=±1):默认|log2FC|>1为显著变化 -
水平线(Y=1.3):对应p=0.05(-log10(0.05)=1.3)
4-5 颜色标注 :
-
红色点:同时满足FC和p值阈值的上调差异基因 -
蓝色点:同时满足FC和p值阈值的下调差异基因 -
灰色点:未达到阈值的非显著基因
下面我们用代码来实现火山图的绘制
三、R语言实现代码
以下代码基于ggplot2包实现火山图绘制,支持自定义阈值和标注:
library(ggplot2)
library(ggrepel)
adj_pval_threshold <- 0.05
logFC_threshold <- 1
# diff_expr_results.txt是差异表达分析的结果文件
results <- read.table(file = "diff_expr_results.txt", sep = "\t", row.names = 1, header = T)
results
差异表达分析的结果文件的结构如上图,接着我们根据logFC和校正后的p值来计算显著的上下调基因。
results$Significant <- "Not Significant"
results$Significant[results$adj.P.Val < adj_pval_threshold & results$logFC > logFC_threshold] <- "Upregulated"
results$Significant[results$adj.P.Val < adj_pval_threshold & results$logFC < -logFC_threshold] <- "Downregulated"
results
我们可以看到
results
增加了一列
Significant
最后绘制火山图
ggplot(results, aes(x = logFC, y = -log10(adj.P.Val), color = Significant)) +
geom_point(alpha = 0.6, size = 1.5) +
scale_color_manual(values = c("lightblue", "grey", "red")) + # 修改配色方案[7,8](@ref)
geom_vline(xintercept = c(-1, 1), linetype = "dashed") +
geom_hline(yintercept = 1.3, linetype = "dashed") +
theme_minimal() +
labs(title = "", x = "Log2 Fold Change", y = "-Log10 Adjusted P-value") +
theme(
plot.title = element_text(hjust = 0.5),
panel.grid.major = element_blank(), # 移除主要网格线[1,4,5](@ref)
panel.grid.minor = element_blank(), # 移除次要网格线[1,4,5](@ref)
panel.background = element_rect(fill = "white") # 可选:设置纯白背景[3](@ref)
)
运行结果 :
火山图本质是帮助我们快速可视化差异基因,如果只从差异表达分析的结果excel文件(上图的results)很难直观看出差异基因,火山图就是根据校正后的p值和logFC,筛选出显著且具有倍数变化的差异基因,帮助我们直观看出这些差异基因的数量和分布。
以上就是今天的内容,希望对你有帮助!欢迎点赞、在看、关注、转发。
完整代码联系老师免费获取(备注“火山图绘制”)