火山图怎么看?如何绘制?——差异表达分析基本技能

生信学长
2025年04月18日
差异表达分析
火山图怎么看?如何绘制?——差异表达分析基本技能

好久不见呀,最近忙着投期刊。今天比较有空来,跟大家分享一下如何读懂火山图,以及对应的代码实现。

差异表达分析是转录组研究中的核心环节,而火山图(Volcano Plot)作为一种直观的可视化工具,能够帮助我们直观看到具有显著表达变化的基因。

火山图的应用场景

火山图主要用于差异表达基因(DEGs)的筛选。它通过横纵坐标分别展示基因表达变化的倍数(log2 Fold Change)和统计学显著性(-log10 p-value),将大量基因数据浓缩在一张图中。

在RNA-seq、蛋白质组学等分析中,火山图可帮助研究者快速识别两类关键基因:

  1. 显著上调基因 :表达量大幅增加且p值显著
  2. 显著下调基因 :表达量大幅降低且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(-11), 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,筛选出显著且具有倍数变化的差异基因,帮助我们直观看出这些差异基因的数量和分布。


以上就是今天的内容,希望对你有帮助!欢迎点赞、在看、关注、转发。

完整代码联系老师免费获取(备注“火山图绘制”)