2025-06-09
火山圖(Volcano Plot)是單細(xi)胞(bao)轉錄組測(ce)序數(shu)據分析中常用(yong)的(de)(de)(de)可視化工(gong)具,它通過將基因的(de)(de)(de)差異表達程度(fold change,FC)和統計學顯著性(p-value 或調整(zheng)后的(de)(de)(de) p-value,如(ru) FDR)相結合,直觀地展(zhan)示(shi)基因在(zai)不同組別或細(xi)胞(bao)類(lei)型下的(de)(de)(de)差異表達情況。
相比于普通火山圖,多組火山圖可以展示(shi)更多分組或細胞(bao)類(lei)型,如(ru)下(xia)圖所示(shi),表(biao)示(shi)的是每個細胞(bao)類(lei)型中的上(shang)下(xia)調(diao)(diao)基因(yin)情況,和普通火(huo)山圖一(yi)樣(yang),根據log2FC和矯正后P值進行繪制(zhi),紅色散點(dian)表(biao)示(shi)上(shang)調(diao)(diao)基因(yin),藍(lan)色散點(dian)表(biao)示(shi)下(xia)調(diao)(diao)基因(yin)。
一般情況下,大家可能(neng)會畫6張(zhang)(zhang)傳統的火(huo)山(shan)圖(tu)(tu),用曼哈頓火(huo)山(shan)圖(tu)(tu)一張(zhang)(zhang)就可以搞定!是(shi)(shi)不是(shi)(shi)很(hen)有用!是(shi)(shi)不是(shi)(shi)很(hen)想(xiang)學!那我們現在就開(kai)始繪(hui)制!
第一步驟:準備數據
markers為(wei)組間(jian)比較(jiao)結果的差異基(ji)因(yin)表格或findAllmarker結果的基(ji)因(yin)列(lie)表
markers = markers %>% filter(p_val < 0.05) %>% filter(abs(avg_log2FC) >= 0.25)
scRNA.markers = markers
scRNA.markers$label <- ifelse(scRNA.markers$avg_log2FC<0,"sigDown","sigUp")
topgene <- scRNA.markers %>%
group_by(celltype) %>%
top_n(n = 10, wt = avg_log2FC) %>%
bind_rows(group_by(scRNA.markers, celltype) %>%
top_n(n = 10, wt = -avg_log2FC))
dfbar = scRNA.markers %>%
group_by(celltype) %>%
summarise(low = round(min(avg_log2FC)-0.5),
up = round(max(avg_log2FC)+0.5))
得到如圖所示數據:
第二步驟:繪制灰色背景柱和分組散點
p1 <- ggplot()+
geom_col(aes(x = celltype ,y = low),dfbar,
fill = "#dcdcdc",alpha = 0.6)+
geom_col(aes(x = celltype ,y = up),dfbar,
fill = "#dcdcdc",alpha = 0.6)+
geom_jitter(aes(x = celltype, y = avg_log2FC, color = label),scRNA.markers,
size = 1,alpha=0.5,position = position_jitter(seed = 1234,width =0.4))+
scale_color_manual(values = c("#0077c0","#c72d2e"))+
theme_classic()
第三步驟:添加分組顏色色塊和標簽
p2 <- p1 +
geom_tile(aes(x = ctys,y = 0),NULL,
height = 0.5,fill = mycol, show.legend = F,alpha = 0.5)+
geom_text(aes(x= ctys, y = 0, label = ctys),NULL,
size = 3,fontface = "bold")
第四步驟:添加基因標簽
p3 <- p2 +
geom_text_repel(aes(x = celltype,y = avg_log2FC,label = do_label), scRNA.markers, position = position_jitter(width =0.4),size = 2,box.padding = unit(0.2, "lines"),point.padding = unit(0.3, "lines"),min.segment.length = 0,max.overlaps = 120,segment.size=0.5,segment.alpha = 0.7 )
第五步驟:調整圖片標題和風格
p3 <- p3+
labs(x = "CellType",y = "log2FoldChange",
title = "Differential expression genes")+
theme(
plot.title = element_text(size = 14,color = "black",face = "bold"),
axis.title = element_text(size = 12,color = "black",face = "bold"),
axis.line.y = element_line(color = "black",linewidth = 0.8),
axis.line.x = element_blank(),
axis.text.x = element_blank(),
axis.ticks.x = element_blank(),
panel.grid = element_blank(),
legend.position = c(0.98,0.96),
legend.background = element_blank(),
legend.title = element_blank(),
legend.direction = "vertical",
legend.justification = c(1,0),
legend.text = element_text(size = 12)
)+
guides(color = guide_legend(override.aes = list(size = 4)))
好看且內(nei)容豐富(fu)的(de)多組火山圖就完(wan)成啦!!
繪制圖片(pian)或者復(fu)現代(dai)碼過程中,如(ru)果(guo)老(lao)師遇到疑惑,歡迎撥打我們(men)的熱線電話或者聯(lian)系我們(men)的駐地銷售(shou)。