差異表現分析跑完了,你手上有一張表,列著每個基因的 log2 倍數變化與校正後 p 值,現在就差審稿人最期待的那張圖:一張乾淨的火山圖(volcano plot)。傳統的 R 流程——ggplot2、EnhancedVolcano,外加不停微調 geom_text_repel 直到標籤不再互相重疊——的確做得出來,但只要你想改個門檻、換個分類顏色,它就慢得讓人崩潰、又毫無彈性。這篇教學要教你怎麼用白話描述就畫出 RNA-seq 與差異表現的火山圖,讓 AI 把圖建好,而你只要專心看生物學。

讀完這篇教學,你將能夠:
- 不寫一行程式就畫出 RNA-seq 火山圖,而且座標軸正確(log2 倍數變化 vs. −log10 校正後 p 值)。
- 為倍數變化與校正後 p 值設定顯著性門檻,並畫出審稿人期待看到的虛線截斷線。
- 為上調與下調基因上色、把不顯著的基因畫成灰色雲團,讓整張圖一眼就讀得懂。
- 用基因名稱標註你的重點命中基因而文字不重疊,並匯出可印刷的火山圖,直接放進論文或學位論文。
以下每一步都在 SciDraw AI 編輯器裡完成,使用的是火山圖產生器——你把資料和想法丟進去,圖就出來,再用文字慢慢調整。
火山圖到底在呈現什麼
火山圖是專為差異表現設計的散布圖。每一個點代表一個基因(也可以是蛋白質或代謝物)。x 軸是 log2 倍數變化——表現往上(右)或往下(左)變動了多少。y 軸是 p 值的 −log10(通常用校正後/FDR 的 p 值)——也就是你對它有多少把握。畫出來就是一座「火山」的形狀:最有意思的基因會落在左上與右上兩個角落,那裡的變化幅度大而且統計上顯著。
整張圖的重點,就是讓你一眼把訊號從雜訊裡分出來。這代表三件事必須清清楚楚:門檻在哪裡、哪些點通過了門檻,以及哪幾個基因值得特別點名。
步驟一:描述你想要的圖
先打開編輯器,告訴 AI 這張圖是什麼。座標軸、資料類型、門檻都要講清楚——夠具體,才能讓一張普通散布圖變成一張正確的火山圖。
範本: 「畫一張[RNA-seq/蛋白質體學/單細胞]差異表現的火山圖。x 軸:log2 倍數變化。y 軸:−log10 校正後 p 值。顯著性門檻:|log2FC| > [1] 且校正後 p < [0.05]。上調基因用[紅色]、下調用[藍色]、不顯著用[灰色]。加上虛線門檻線。」
填好內容的範例:
- 「畫一張 RNA-seq 實驗的火山圖,比較處理組 vs. 對照組。x 軸 log2 倍數變化從 −6 到 6,y 軸 −log10 校正後 p 值。用 |log2FC| > 1 且校正後 p < 0.05 當截斷值。上調基因紅色、下調藍色、不顯著灰色,並在 ±1 處畫垂直虛線、在 p = 0.05 的高度畫一條水平虛線。」
步驟二:設定門檻與門檻線
門檻是整張圖的核心,而且正是那種你會想隨手改、又不想重畫的東西。有兩個截斷值最關鍵:
- 倍數變化截斷值——通常是
|log2FC| > 1(2 倍變化),但0.585(1.5 倍)和2(4 倍)也很常見。 - 顯著性截斷值——通常用校正後 p 值(Benjamini-Hochberg FDR),而不是原始 p 值。
0.05和0.01是標準值。
直接用對話的方式調整:
- 「把倍數變化截斷值改成 |log2FC| > 0.585(1.5 倍)。」
- 「用校正後 p < 0.01 取代 0.05,並把水平虛線移到對應的位置。」
- 「把門檻線改成淺灰色虛線,這樣才不會跟資料點搶版面。」

步驟三:為上調與下調基因上色
顏色是讓火山圖好讀的關鍵。慣例是三色配置:一種顏色給顯著上調的基因、一種給顯著下調的、再用中性的灰色給所有沒通過門檻的點。
- 「上調基因(+1 右側、p 門檻上方)用紅色;下調(−1 左側)用藍色;其餘全部灰色、透明度 40%。」
- 「加一個圖例:紅色 = 上調、藍色 = 下調、灰色 = 不顯著。」
- 「把顯著的點稍微放大,不顯著的縮小並做半透明。」
把不顯著的雲團維持得淡一點,視線自然就會被推往角落——而那正是故事所在。
步驟四:標註你的重點命中基因
審稿人想看到亮眼的基因被點名,但一整面互相重疊的標籤比完全不標還糟。要有所取捨,讓 AI 自己排版、避免碰撞。
- 「依校正後 p 值標出前 10 名基因,標上基因符號,用細的引線、文字不重疊。」
- 「只標這幾個基因:TP53、BRCA1、MYC、EGFR、CDKN1A。」
- 「把最顯著的三個上調基因標籤加粗。」
這正是「用描述」勝過「手動擺文字框」的地方:你開出命中名單,排版交給 AI。等版面對了,再去微調任何單一標籤——針對性的文字修改可參考如何編輯 AI 圖表中的文字與標籤。
常見錯誤(以及如何修正)
- 用原始 p 值而非校正後 p 值。 多重檢定的膨脹會讓什麼都看起來顯著。修正: 「y 軸請畫校正後(FDR)p 值的 −log10,不要用原始 p 值。」
- 座標軸不對稱或被截斷,藏住了某個方向。 如果 x 軸只從 0 到 6,下調基因就消失了。修正: 「把 x 軸做成對稱的,從 −6 到 6,以 0 為中心。」
- 標籤太多。 四十個重疊的基因名稱 = 看不懂。修正: 「只標前 8 名命中基因,其餘移除。」
- 沒有門檻線。 截斷值只是隱含,卻看不見。修正: 「在倍數變化與 p 值截斷處加上虛線,讓各區域一目了然。」
- 配色忽略了方向。 所有顯著基因都用同一種顏色,會丟掉上調/下調的故事。修正: 「上調與下調基因請用不同顏色。」
- 悄悄把 −log10(p) 封頂。 p = 0 的基因會衝到無限大。修正: 「把 y 軸封頂,並用空心箭頭標出被封頂的點,誠實呈現。」
匯出與使用
圖對了之後,就依照用途匯出。需要什麼就直接說:
- 「把這張匯出成 300 DPI 的 PNG,尺寸符合單欄期刊版面。」
- 「給我向量版(SVG),方便我丟進 Illustrator。」
- 「匯出寬 1200 px、透明背景的版本,給我做投影片用。」
火山圖很少單獨出現。如果你的差異表現結果會餵進一篇系統性回顧,或你正在組一張多面板的結果圖,可以搭配如何製作森林圖來呈現效應量摘要;當某個基因名稱需要最後一刻修正時,再回頭看如何編輯 AI 圖表中的文字與標籤。所有東西都在 SciDraw AI 編輯器裡保持可編輯。
常見問題
不寫程式要怎麼畫 RNA-seq 火山圖? 打開火山圖產生器,描述你的比較(處理組 vs. 對照組)、說明 log2 倍數變化與校正後 p 值門檻,AI 就會把圖建好。顏色、標籤、截斷值都用打字下指令來調整——完全不需要 R 或 Python。
火山圖應該用什麼門檻?
最常見的預設是 |log2FC| > 1(2 倍變化)搭配校正後 p 值 < 0.05。比較嚴格的研究會用 |log2FC| > 1 搭配校正後 p < 0.01。一定要用校正後(FDR)p 值,不要用原始的,並在圖例中註明你的截斷值。
y 軸該用原始還是校正後 p 值? 用校正後 p 值(Benjamini-Hochberg/FDR),以 −log10 呈現。RNA-seq 會檢定數萬個基因,用原始 p 值會把太多基因標成顯著。畫 −log10(校正後 p) 才能讓你的顯著基因集誠實可信。
怎麼只標最重要的那幾個基因? 請 AI 依校正後 p 值標出前 N 名基因,或直接點名你在意的特定基因。要求用細引線、文字不重疊,這樣即使在密集的圖上,標籤也維持清楚易讀。
蛋白質體學或代謝體學也能畫火山圖嗎? 可以。同樣的座標軸與門檻適用於任何差異豐度實驗——蛋白質體學、代謝體學或單細胞都行。只要告訴火山圖產生器資料類型與你的截斷值,它就會調整標籤與上色方式。
現在就畫你的火山圖
別再跟 geom_text_repel 搏鬥了。描述你的差異表現資料、設好門檻,讓 AI 畫出一張乾淨、標好標籤、可直接投稿的圖。打開火山圖產生器,或直接跳進 SciDraw AI 編輯器,幾分鐘內就能做出你的火山圖。



