1. 火山图概述
我第一次接触火山图,是在一次RNA-seq分析报告会上。当时组里一个博士指着屏幕上红蓝斑驳的散点图说:“看,这就是火山图。”我盯着看了半天,心想这不就是一堆点嘛。后来自己上手做过一次差异表达分析,才知道这图里藏着多少信息。
说白了,火山图就是一种散点图,专门用来展示两组样本间基因表达差异的统计结果。它之所以叫“火山”,是因为图里那些显著差异基因的点会向两侧喷溅,像火山爆发一样。核心逻辑很简单:横轴表示变化幅度,纵轴表示统计显著性。你想想看,把几千个基因同时扔到这张图上,哪些基因值得关注,一眼就能看出来。
1.1 火山图长什么样?
直接说结构吧。火山图有两个坐标轴:
- X 轴:log2(Fold Change)。表示基因在两组之间表达量的差异倍数,取对数是为了让上下调对称。往右是上调(处理组比对照组高),往左是下调。
- Y 轴:-log10(p-value)。p值越小,取负对数后的值就越大,点在图上就越“高”。通常画一条水平虚线表示 p = 0.05 的阈值。
除了这两个轴,图里还有两条垂直虚线,标出变化幅度阈值(比如 |log2FC| > 1,对应倍率变化 2 倍以上)。落在右上角或左上角的点,就是你要找的显著差异基因。
| 区域 | 条件 | 含义 |
|---|---|---|
| 右上角 | log2FC > 1 & p < 0.05 | 显著上调(处理组高) |
| 左上角 | log2FC < -1 & p < 0.05 | 显著下调(处理组低) |
| 中间一大片 | 其他 | 变化不显著或变化很小 |
颜色的含义也直接:我一般把上调标红,下调标蓝,其余点用灰色。当然你可以按自己的喜好改,但红色和蓝色是最通用的,一眼就能看出两组差异的“方向”。
💡 一个实用的习惯: 我画火山图时,会在图上标出排名前 5–10 的差异基因名称。这样汇报的时候,别人不用去底表里翻,直接看图就知道哪些基因最显著。
1.2 火山图有什么用?
你可能要问:“一堆点,能干什么用?”其实用处很大,至少三条:
- 快速锁定候选基因。几千个基因,一个个看 p 值表格不现实。一张火山图丢过去,哪些飙升、哪些暴跌,一目了然。我曾在一次外显子测序项目中用火山图帮临床医生找到了一个罕见的 splice variant——就是因为它那个点孤零零地悬在右上角。
- 验证数据质量。如果火山图呈现“沙漏形”或团状,说明可能有批次效应或数据分布异常。正常的火山图应该是“V”形分布,中间密、两侧稀疏。
- 直观汇报。相比表格,火山图更容易被非生物信息背景的人理解。我每次做项目总结,都会放一张火山图,配合几句描述:“红色点代表显著上调的基因,总共 236 个,其中最有潜力的是……”效果比列数字好得多。
1.3 生物信息学中的具体场景
火山图最早来自 RNA-seq 差异表达分析,但现在早就“出圈”了。我见过这些场景:
- RNA-seq / 微阵列差异表达——最经典的用法。两组样本之间,哪些基因表达量显著变化。
- ChIP-seq 差异峰分析——横轴换成峰信号的 log2FC,纵轴换成结合差异的 p 值。看哪些区域的结合谱发生了改变。
- 蛋白质组学差异丰度分析——质谱测出来的 peptide 丰度差异,一样可以用火山图展示。
- 单细胞 RNA-seq 差异基因筛选——虽然单细胞数据通常用 violin plot、feature plot,但做组间差异基因时,火山图依然管用。
- CRISPR 筛选——阴性筛选(sgRNA 丰度变化)也用火山图来看哪些 guide RNA 富集或丢失。
说实话,只要你手头有 两组数据的定量比较 + 统计显著性,就能画火山图。它不限定具体技术,是个通用工具。
⚠️ 我曾经踩过的坑: 有次我用 DESeq2 算完 p 值,直接画火山图,发现调整后 p 值(padj)特别严格,几乎没几个点显著。后来才反应过来——应该用原始 p 值配合筛选倍数做初步探索,最后再用 padj 做严格验证。否则画出来的图可能全是灰色,啥也看不出来。
1.4 火山图的完整结构图
下面我用一个 SVG 把火山图的核心组件和区域关系梳理一下。你可以把它当成一张思维导图,方便理解后面几章怎么画它。