分析背景
????火山圖常用于轉(zhuǎn)錄組研究中艇拍,也能應(yīng)用于基因組狐蜕,蛋白質(zhì)組,代謝組等統(tǒng)計(jì)數(shù)據(jù)卸夕。它歸根到底是是散點(diǎn)圖的一種馏鹤,它能將統(tǒng)計(jì)學(xué)中的統(tǒng)計(jì)顯著性量度(如p value,矯正后的P值)和變化幅度相結(jié)合娇哆,從而能夠幫助人們識(shí)別那些變化幅度較大且具有統(tǒng)計(jì)學(xué)意義的數(shù)據(jù)(如基因,蛋白等)勃救,如下圖所示碍讨。
圖形分解
- 圖中每一點(diǎn)代表所研究的基因,灰色的點(diǎn)代表這些基因在實(shí)驗(yàn)組和對(duì)照組的表達(dá)情況不具有差異性蒙秒,綠色和紅色的點(diǎn)代表上調(diào)基因和下調(diào)基因勃黍。
- 橫坐標(biāo)log2FC代表差異倍數(shù),離坐標(biāo)原點(diǎn)越遠(yuǎn)晕讲,說(shuō)明差異倍數(shù)越大
- 縱坐標(biāo)-log10(PValue)代表差異結(jié)果的顯著性覆获,越往上的點(diǎn),說(shuō)明差異結(jié)果越顯著瓢省。
- 圖1B與圖1A向比較弄息,圖1B將實(shí)驗(yàn)組和對(duì)照組中差異倍數(shù)最大的前二十個(gè)基因的名稱在圖中展示出來(lái),包括十個(gè)上調(diào)基因和十個(gè)下調(diào)基因勤婚,當(dāng)然在后面小編將教小伙伴們?nèi)绾螌⒏信d趣的基因(如:抑癌基因摹量,管家基因,促癌基因)展示在圖上中馒胆。
函數(shù)式編程的優(yōu)勢(shì)
- 與零碎的代碼相比缨称,反復(fù)調(diào)用,參數(shù)簡(jiǎn)單易學(xué)祝迂,對(duì)初學(xué)者更加友好睦尽。
- 與網(wǎng)頁(yè)繪圖小工具相比,不要要注冊(cè)型雳,不需要付費(fèi)当凡,方面經(jīng)濟(jì)。
- 對(duì)有經(jīng)驗(yàn)的程序員纠俭,函數(shù)式編程能夠提高程序員的編程水平宁玫,減少代碼的重復(fù)使用,高效快捷
敲黑板柑晒,劃重點(diǎn)
????小編今天把小伙伴們轉(zhuǎn)錄組分析常用的火山圖封閉成函數(shù)欧瘪,并使用ggplot2,小伙伴們拿到函數(shù)以后匙赞,只需要將數(shù)據(jù)整理成固定的格式佛掖,代入函數(shù)中妖碉,即可繪制成高質(zhì)量,高顏值的火山圖芥被,用AI小修一下欧宜,即可插入到自己的文章中。
分析方法
# 安裝R包
if (!requireNamespace("ggplot2", quietly = TRUE))
install.packages("ggplot2",repos = "https://mirrors.tuna.tsinghua.edu.cn/CRAN/")
if (!requireNamespace("RColorBrewer", quietly = TRUE))
install.packages("RColorBrewer",repos = "https://mirrors.tuna.tsinghua.edu.cn/CRAN/")
if (!requireNamespace("data.table", quietly = TRUE))
install.packages("data.table",repos = "https://mirrors.tuna.tsinghua.edu.cn/CRAN/")
# 自定義函數(shù)
## 快速讀入數(shù)據(jù)
readFlie=function(input,type,row=T,header=T){
# input 為讀入文件的路徑拴魄,type為讀入文件的類型冗茸,格式為‘.txt’或‘.csv’,row=T,將文件的第一列設(shè)置為列名
library(data.table,quietly = TRUE)
if(type=='txt'){
dat = fread(input,header = header,sep='\t',stringsAsFactors = F,check.names = F)
if(row){
dat = as.data.frame(dat,stringsAsFactors = F)
rownames(dat) = dat[,1]
dat = dat[,-1]
}else{
dat = as.data.frame(dat,stringsAsFactors = F)
}
}else{
dat = fread(input,header = header,sep=',',stringsAsFactors = F,check.names = F)
if(row){
dat = as.data.frame(dat,stringsAsFactors = F)
rownames(dat) = dat[,1]
dat = dat[,-1]
}else{
dat = as.data.frame(dat,stringsAsFactors = F)
}
}
return(dat)
}
# 保存圖片
savePlots=function(path,plot,type=c('pdf','png','tiff')[1],width=10,height=8,dpi=300){
# path表示保存圖片路徑,需要加上相應(yīng)的文件擴(kuò)展名稱
library(ggplot2)
if(type=='pdf'){
ggsave(filename = path,plot = plot,width = width,height = height,device = 'pdf')
}else if(type=='png'){
ggsave(filename = path,plot = plot,width = width,height = height,device = 'png',dpi = dpi)
}else{
ggsave(filename = path,plot = plot,width = width,height = height,device = 'tiff',dpi = dpi)
}
}
實(shí)戰(zhàn)演練
掃描關(guān)注微信公眾號(hào),后臺(tái)回復(fù)火山圖匹中,獲取源代碼和測(cè)試數(shù)據(jù)
# 讀入數(shù)據(jù)
df = readFlie('./DEGs_result.txt',type = 'txt')
# 繪圖
fg=wn_volcano(Symbol = rownames(df),logFC=df$logFC,Pvalue=df$FDR)
# 展示圖片
fg
# 保存圖片
savePlots(path = './fg.pdf',plot = fg,type = 'pdf',width = 10,height = 8)
savePlots(path = './fg.png',plot = fg,type = 'png',width = 10,height = 8,dpi = 300)
savePlots(path = './fg.tiff',plot = fg,type = 'tiff',width = 10,height = 8,dpi = 600)
高級(jí)繪圖
????在圖1B中夏漱,小編給大家提了一下能在火山圖中展示自己感興趣的基因,說(shuō)到這里顶捷,小伙伴們一定猜到了挂绰,小編肯定把這個(gè)函數(shù)寫(xiě)好了。小伙伴們只需要給函數(shù)傳入特定的基因名稱服赎,火山圖中就可以展示這個(gè)基因葵蒂,繪制出來(lái)的圖形如圖2A和圖2B所示:圖2A是函數(shù)默認(rèn)展示的是差異倍數(shù)最大的前二十個(gè)基因,包括十個(gè)上調(diào)基因和十個(gè)下調(diào)基因重虑;圖2B是小編想展示P值最小前十個(gè)基因践付。閱讀原文,獲取高級(jí)火山圖繪制源代碼缺厉。