火山圖(Volcano Plot)常用于展示基因表達(dá)差異的分布,橫坐標(biāo)常為Fold change(倍數(shù)),越偏離中心差異倍數(shù)越大;縱坐標(biāo)為P value(P值),值越大差異越顯著。得名原因也許是因?yàn)?/span>結(jié)果圖像火山吧
一 載入R函數(shù)包及數(shù)據(jù)集
library(ggplot2)data <- read.csv("火山圖.csv",header=TRUE,row.names = 1)
head(data) #查看數(shù)據(jù)類型,主要有P值,F(xiàn)old change和基因ID即可。 二 ggplot2繪制火山圖
2.1 繪制簡單的火山圖--點(diǎn)圖
ggplot(data = data, aes(x = logFC, y = -log10(adj.P.Val))) +geom_point(alpha=0.8, size = 1)
和文獻(xiàn)中的差距較大,以下幾個(gè)方面可改進(jìn):
A:上下調(diào)基因的區(qū)分;
B:橫軸,縱軸的閾值線;
C:重點(diǎn)基因的標(biāo)示。
2.2 細(xì)節(jié)優(yōu)化火山圖
1)根據(jù)閾值設(shè)定上下調(diào)基因
新增change列,利用ifelse函數(shù)添加基因的上下調(diào)情況,color進(jìn)行區(qū)分,然后使用geom_hline() ?和 geom_vline( )參數(shù)添加閾值線,
data$change <- as.factor(ifelse(data$adj.P.Val < 0.01 & abs(data$logFC) > 1,ifelse(data$logFC > 1,'UP','DOWN'),'NOT')) 2)添加閾值線
使用geom_hline() ?和 geom_vline( )參數(shù)添加閾值線
ggplot(data = data, aes(x = logFC, y = -log10(adj.P.Val), color = change)) +geom_point(alpha=0.8, size = 1) +theme_bw(base_size = 15) +??theme(panel.grid.minor?=?element_blank(),panel.grid.major?=?element_blank())?+geom_hline(yintercept=2 ,linetype=4) +geom_vline(xintercept=c(-1,1) ,linetype=4 ) +scale_color_manual(name = "", values = c("red", "green", "black"), limits = c("UP", "DOWN", "NOT"))
3) 標(biāo)示重點(diǎn)顯著差異基因
上圖是不是有點(diǎn)像了,新增sign列,利用ifelse函數(shù)添加重點(diǎn)顯著差異基因,然后使用geom_text參數(shù)添加到圖上,
data$sign <- ifelse(data$adj.P.Val < 0.001 & abs(data$logFC) > 2.5,rownames(data),NA) ggplot(data = data, aes(x = logFC, y = -log10(adj.P.Val), color = change)) +geom_point(alpha=0.8, size = 1) +theme_bw(base_size = 15) +??theme(panel.grid.minor?=?element_blank(),panel.grid.major?=?element_blank())?+geom_hline(yintercept=2 ,linetype=4) +geom_vline(xintercept=c(-1,1) ,linetype=4 ) +scale_color_manual(name = "", values = c("red", "green", "black"), limits = c("UP", "DOWN", "NOT")) +geom_text(aes(label = sign), size = 3)
?
4) 解決基因名重疊問題
基本和paper一致,但是因?yàn)椴町惐磉_(dá)基因太多,存在重疊情況,現(xiàn)使用R語言的ggrepel包解決標(biāo)簽太多導(dǎo)致的重疊問題。
library(ggrepel)ggplot(data = data, aes(x = logFC, y = -log10(adj.P.Val), color = change)) +geom_point(alpha=0.8, size = 1) +theme_bw(base_size = 15) +??theme(panel.grid.minor?=?element_blank(),panel.grid.major?=?element_blank())?+scale_color_manual(name = "", values = c("red", "green", "black"), limits = c("UP", "DOWN", "NOT")) +??geom_label_repel(aes(label=sign),?fontface="bold",?color="grey50",?box.padding=unit(0.35,?"lines"),?point.padding=unit(0.5,?"lines"),?segment.colour?=?"grey50")
5) 標(biāo)示感興趣的基因的表達(dá)情況
將我們感興趣的基因添加到數(shù)據(jù)的LABEL列中,假設(shè)以下幾個(gè)基因是我們重點(diǎn)關(guān)注的基因,單獨(dú)查看以下基因的表達(dá)情況
ggplot(data = data, aes(x = logFC, y = -log10(adj.P.Val), color = change)) +geom_point(alpha=0.8, size = 1) +theme_bw(base_size = 15) +theme(panel.grid.minor = element_blank(),panel.grid.major = element_blank() ) +scale_color_manual(name = "", values = c("red", "green", "black"), limits = c("UP", "DOWN", "NOT")) +geom_label_repel(aes(label=LABEL), fontface="bold", color="grey50", box.padding=unit(0.35, "lines"), point.padding=unit(0.5, "lines"), segment.colour = "grey50")
吶,到這里除了數(shù)據(jù)不一樣,基本實(shí)現(xiàn)了文獻(xiàn)中的火山圖,是不是以為到這就結(jié)束了?NO!NO!NO! 實(shí)現(xiàn)上述靜態(tài)的就可以發(fā)paper去了!
但是,,,
匯報(bào)展示的時(shí)候,如果能動(dòng)態(tài)交互式的展示所有顯著基因的FC值和P值,是不是更酷炫!
三 plotly繪制交互式火山圖
1)plot_ly函數(shù)畫散點(diǎn)圖
library(plotly)plot_ly(data,x = ~logFC, y = ~-log10(adj.P.Val),text = ~sign, type = 'scatter', mode = 'markers')
會(huì)彈出一個(gè)網(wǎng)頁,然后可以交互式的展示每個(gè)點(diǎn)的FC值和P值。
那可不可以在“paper”級(jí)靜態(tài)火山圖的基礎(chǔ)上,實(shí)現(xiàn)交互式呢?當(dāng)然可以!??!
四,參考資料
https://www.bioconductor.org/packages/release/bioc/vignettes/EnhancedVolcano/inst/doc/EnhancedVolcano.html
R|plotly
更多關(guān)于生信 ,R ,Python的內(nèi)容請掃碼關(guān)注小號(hào),謝謝。
其他可能感興趣
R|繪圖邊距及布局
R-基本繪圖參數(shù)(Ⅰ)
ggplot2|從0開始繪制直方圖
ggplot2|從0開始繪制折線圖
ggplot2|從0開始繪制箱線圖
ggplot2|繪制GO富集柱形圖
ggplot2| 繪制KEGG氣泡圖
ggplot2|擴(kuò)展包從0開始繪制雷達(dá)圖
繪圖系列|R-corrplot相關(guān)圖
繪圖系列|R-wordcloud2包繪制詞云
繪圖系列|R-VennDiagram包繪制韋恩圖
R|UpSet-集合可視化