還在畫常規(guī)的火山圖?讓你的火山圖“活”過來
小伙伴對火山圖以及耳濡目染了,想必做每個差異分析的時候,都少不了它,當然也少不少熱圖的表達,不過今天的主角是火山圖,小果帶小伙伴做不一樣的火山圖,讓小伙伴發(fā)表高水平的圖片。 火山圖的含義我們也不過多的介紹,一般的我們常用來展示基因表達差異的分布,橫坐標一般為Fold?change,越偏離中心差異倍數(shù)就越大;橫坐標就為P?value也就是我們常見到P值,值越大呢就越顯著,接下來就跟隨小果去學習吧!
這里我們使用的是我們的老朋友ggplot2 library(ggplot2)#調用一下,順便導入我們的數(shù)據(jù) data <- read.csv("火山data.csv",header=TRUE,row.names = 1) head(data)
?#查看數(shù)據(jù)類型,主要有P值,F(xiàn)old change和基因ID即可,后面有一個LABEL,可能會有小伙伴疑惑,后面小果會介紹到,不要擔心,小伙伴自行把其他數(shù)據(jù)設置好就可以跟著小果繼續(xù)學習 先繪制簡單的火山圖點圖
是不是單調,沒有任何信息讓我們去分析,我們接下來把細節(jié)去優(yōu)化一下比如:最重要的上下調基因的區(qū)分,橫縱軸的閾值線,重點基因的標注,我們一步一步來 先根據(jù)閾值設定上下調的基因 這里我們用代碼新增change列,然后利用ifelse函數(shù)添加基因的上下調情況,然后color進行區(qū)分,最后使用geom_hline和geon_vline()的參數(shù)去設置閾值線。 data$change <- as.factor(ifelse(data$adj.P.Val < 0.01 & abs(data$logFC) > 1,ifelse(data$logFC > 1,'UP','DOWN'),'NOT'))
是不是增加了一列新的 然后添加閾值線還有顏色區(qū)別
這樣一來就明顯多了,小伙伴往往繪制到這里就不往下繪制了這樣一來我們顯著的基因也沒辦法在圖片中尋找到,我們去標注重點顯著的差異基因: 這里我們新增sign列,利用ifelse函數(shù)添加重點顯著差異基因,然后使用geom_text參數(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")) + ??geom_text(aes(label = sign), size = 3)
結果就出來了,不過小伙伴發(fā)現(xiàn)很多的基因都是重疊的,沒辦法分清楚 這個時候就用到ggplot2包中的ggrepel我們的老朋友啦 這個包可以幫我們解決重疊的問題: 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")
是不是明顯不一樣了 每一個基因都很清楚的展示出來, 那小伙伴想展示自己想展示的基因怎么辦,不要困惑,小果繼續(xù)教大家: 我們把感興趣的基因添加在LABEL列,就是一開始小果導入數(shù)據(jù)的賣的官司,這里小果自己隨便寫了幾個基因給小伙伴演示一下:
下面我們去繪制圖片: 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")
是不是就出現(xiàn)了呢,小伙伴是否學會呢,一定要親手去實驗一下,才能學的更精, 不過小果在這里做個小插曲 我們可以制作交互式的火山圖,雖然不能放在小伙伴的文章中,不過平時我們匯報其他用途時候還是很有意思的 來看一下:用plot_ly函數(shù)繪制散點圖 library(plotly) plot_ly(data,x = ~logFC, y = ~-log10(adj.P.Val),text = ~sign, type = 'scatter',?mode = 'markers')
會出現(xiàn)一個頁面,當我們鼠標放上去時候就會顯示那個點的信息,是不是很有意思, 上述“活”過來的火山圖是否學會了呢,小伙伴要多多理解代碼的意思,才能繪制出自己想要的圖片!