火山今始見,突兀蒲昌東。——岑參《經火山》
大家好,我是阿琛。當我們通過分析得到基因在不同分組中的表達情況,以及顯著上調或下調的差異基因時,如何将該結果進行可視化展示随之出現。在生信分析中,火山圖和熱圖是兩種最為常見的展示方法。火山圖,Volcano Plot,因其形狀類似噴發的火山而得名。
1.R包的安裝與讀取
首先,自然是R包的選擇與安裝。經過多期内容的講解,相信大家對于R語言繪圖也基本有了一個基本的了解。作圖常用三大包,分别是base包,強大的ggplot2包,以及在ggplot2基礎上發展而來的ggpubr包。對于點圖的繪制,在此我們選擇ggpubr包來講講火山圖的繪制。
#install.packages("ggpubr") #install.packages("ggthemes") #加載ggpubr包 library(ggpubr) library(ggthemes)
2.數據集的加載與引用
rt <- read.table("TCGA.diff.txt", sep=" ",header=T) head(rt) #顯示前6行
結果顯示,在該數據集中,包括了基因名,正常組和對照組的表達平均值,以及差異分析得到的logFC,P 值,以及校正後的fdr值。
str(rt) #查看數據結構
通過str()函數簡單查看每個變量的數據類型。
3.數據内容的整理
#對fdr值進行取對數處理 rt$logP <- -log10(rt$fdr) #定義顯著上/下調基因 rt$Type <- "no" #新增一列Type rt$Type[which((rt$fdr < 0.05) & (rt$logFC > 1))] <- "up-regulated" rt$Type[which((rt$fdr < 0.05) & (rt$logFC < -1))] <- "down-regulated" table(rt$Type) #對Type中的數量進行統計
到此,整個數據的準備工作就基本完成了,其中顯著上調的基因共23個,顯著下調的基因共468個。
4.繪制火山圖
接下來,我們一起來看下如何一步步由淺入深,逐步繪制火山圖逐步為火山圖添磚加瓦,增加各種信息。
ggscatter(rt, x = "logFC", y = "logP") theme_base() ylim(-0.2, 17)
首先,在ggscatter()函數中對數據集和圖形的x軸、y軸進行定義,得到整個火山圖的初步框架。
ggscatter(rt, x = "logFC", y = "logP", color = "Type", palette = c("blue", "black", "red"), size = 1) theme_base() ylim(-0.2, 17)
随後,對基因中顯著上調或者下調的基因顔色進行定義,賦予上調的基因紅色,以及下調的基因藍色,進行可視化的區分。
ggscatter(rt, x = "logFC", y = "logP", color = "Type", palette = c("blue", "black", "red"), size = 1) theme_base() ylim(-0.2, 17) geom_hline(yintercept = -log10(0.05), linetype = "dashed") geom_vline(xintercept = c(-1, 1), linetype = "dashed")
通過geomhline()和geomvline()兩個函數,分别在x軸和y軸方向上添加三條輔助性的虛線,将顯著改變的基因與其他基因進行區分開來。
到此為止,火山圖也就基本繪制完成了。當然,有些小夥伴可能還在文章中見過帶基因名字标簽的高級版火山圖。接下來,我們就來看下如何對顯著上調或下調的5個點添加基因标簽。
rt$Name = "" #新加一列Name rt<-rt[order(rt$fdr),]#對差異基因的p值進行從小到大的排序 #高表達的基因中,選擇fdr值最小的5個 up.genes <- head(rt$gene[which(rt$Type == "up-regulated")], 5) #低表達的基因中,選擇fdr值最小的5個 down.genes <- head(rt$gene[which(rt$Type == "down-regulated")], 5) #将up.genes和down.genes合并,并加入到Name中 rt.top.genes <- c(as.character(up.genes), as.character(down.genes)) rt$Name[match(rt.top.genes, rt$gene)] <- rt.top.genes
新增一個名為Name的列,通過排序,分别篩選出fdr值最小的顯著上調和下調基因,并将他們的基因名賦予給Name列。
#繪制火山圖 ggscatter(rt, x = "logFC", y = "logP", color = "Type", palette = c("blue", "black", "red"), size = 1, label = rt$Label, font.label = 8, repel = T, xlab = "log2FoldChange", ylab = "-log10(Adjust P-value)") theme_base() ylim(-0.2, 17) geom_hline(yintercept = -log10(0.05), linetype = "dashed") geom_vline(xintercept = c(-1, 1), linetype = "dashed")
這樣,一張精美的高級版火山圖就繪制完成了。
差異分析搭配火山圖來展示,是不是十分完美呢?好了,今天的分享就到此為止了,大家根據講解自己進行相關的練習~~~
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!