火山圖(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)然可以!6谐严就!
四,參考資料
https://www.bioconductor.org/packages/release/bioc/vignettes/EnhancedVolcano/inst/doc/EnhancedVolcano.html
R|plotly
更多關(guān)于生信 伴找,R 盈蛮,Python的內(nèi)容請(qǐng)掃碼關(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-集合可視化