了解和繪制火山圖

師弟:師兄,火山圖怎么得到的格侯?我都快愁死了......
師兄:你不是學(xué)過R語言嗎鼻听?
師弟:道理倒是都懂,看書歸看書联四,但是實(shí)際應(yīng)用起來大腦就一片空白撑碴,完全沒有構(gòu)思......
師兄:不怕,我這個(gè)有個(gè)完整的框架朝墩,你來學(xué)習(xí)一下醉拓?

首先,什么是火山圖

火山圖是轉(zhuǎn)錄組分析中經(jīng)常能夠見到的一類統(tǒng)計(jì)圖,常用于反映差異表達(dá)基因概況亿卤。例如腫瘤組織與正常組織相比愤兵,那些基因存在過表達(dá)或被抑制,可以是編碼基因排吴、蛋白表達(dá)水平秆乳,也可以是其它lncRNA、miRNA傍念、circRNA等非編碼RNA分子矫夷。

火山圖本質(zhì)上是散點(diǎn)圖的一種葛闷,因其外觀形似火山(噴發(fā))憋槐,所以稱為火山圖。兩個(gè)坐標(biāo)軸中淑趾,一個(gè)代表差異倍數(shù)變化(通常為log2轉(zhuǎn)化后的fold change值)阳仔,一個(gè)代表顯著性(通常為-log10轉(zhuǎn)化后的p值或p調(diào)整值),將各基因映射到圖中扣泊,并根據(jù)預(yù)先定義的閾值在圖中用不同顏色標(biāo)識顯著上近范、下調(diào)的基因。


文獻(xiàn)中常見火山圖舉例

差異表達(dá)基因分析

可知火山圖主要反映的是基因整體差異表達(dá)狀態(tài)延蟹。因此為了獲得火山圖评矩,首先需要根據(jù)基因表達(dá)定量數(shù)據(jù)計(jì)算各基因在比較兩組中的差異狀況,獲得表達(dá)值的倍數(shù)變化以及顯著性信息阱飘,并定義閾值確定一些高度顯著的差異基因斥杜。

常見方法如edgeR、DESeq2等沥匈,這些都是目前識別差異表達(dá)分子的主流工具蔗喂。在前面的文章中也介紹過這些工具的使用,詳情可點(diǎn)擊查看:edgeR高帖、DESeq2缰儿。

火山圖繪制

具體的差異表達(dá)基因計(jì)算過程不是本篇的內(nèi)容,就不再細(xì)提散址。

總之最后獲得了類似這樣的一張統(tǒng)計(jì)表乖阵,見示例數(shù)據(jù)“control_treat.count.txt”,記錄了各基因的名稱预麸、log2轉(zhuǎn)化后的fold change值义起、顯著性p值、p調(diào)整值以及標(biāo)識的顯著上师崎、下調(diào)基因等默终,接下來通過該表繪制火山圖就可以了。

本文的所有測試數(shù)據(jù)和R代碼,可在文末獲取齐蔽。

DESeq2的示例輸出

就R的作圖包而言两疚,ggplot2為此提供了優(yōu)秀的作圖方案,參考以下示例含滴。

初步繪制輪廓

首先诱渤,如上所述,火山圖就是一種特殊的散點(diǎn)圖樣式谈况。因此可以先不要管太多的細(xì)節(jié)勺美,先大致繪制一個(gè)輪廓來觀察下,數(shù)據(jù)是否合理碑韵,差異基因數(shù)量大致有多少等赡茸。

選擇表中的log2轉(zhuǎn)化后的fold change值(log2FoldChange),以及p調(diào)整值(padj)并進(jìn)行-log10轉(zhuǎn)化后祝闻,分別作為兩個(gè)坐標(biāo)軸占卧,繪制散點(diǎn)圖就可以了。

對于上联喘、下調(diào)的基因华蜒,使用不同顏色表示。

#如未安裝R包需要首先安裝
#install.packages('ggplot2')

#加載R包
library(ggplot2)

#讀取數(shù)據(jù)
dat <- read.table('control_treat.DESeq2.txt', header = TRUE, sep = '\t')

#ggplot2 作圖豁遭,橫坐標(biāo) log2FoldChange叭喜,縱坐標(biāo) -log10 轉(zhuǎn)化后的 padj
p <- ggplot(data = dat, aes(x = log2FoldChange, y = -log10(padj))) +
geom_point(aes(color = sig), size = 1) +  #繪制散點(diǎn)圖,點(diǎn)的顏色表示上下調(diào)狀態(tài)
scale_color_manual(values = c('red', 'gray', 'green4'), limits = c('up', 'none', 'down')) + #指定節(jié)點(diǎn)顏色
labs(x = 'log2 Fold Change', y = '-log10 adjust p-value', 
    title = 'control vs treat', color = '')  #x蓖谢、y 軸標(biāo)題設(shè)置

p
初始樣式捂蕴,先繪制一個(gè)大致輪廓,用于觀測整體數(shù)據(jù)

有關(guān)主題細(xì)節(jié)的調(diào)整

大致的輪廓出來后蜈抓,如果覺得數(shù)據(jù)可觀启绰,適合擺放到文章中,就可以進(jìn)一步的調(diào)整火山圖的細(xì)節(jié)了沟使。

接下來就需要設(shè)法將這個(gè)火山圖變得更美觀一些委可,涉及了ggplot2的主題調(diào)整。ggplot2的主題樣式非常多腊嗡,這里以一些簡單示例來大致展示下着倾。

例如,標(biāo)題居中燕少、去除網(wǎng)格線和背景卡者、去除圖例背景、字體大小修改以及在圖中標(biāo)出差異基因篩選的閾值線等客们。

#theme()用于修改主題崇决,包括修改背景色材诽、網(wǎng)格線、字體大小等
p <- p +
theme(plot.title = element_text(hjust = 0.5, size = 14), 
    panel.grid = element_blank(), panel.background = element_rect(color = 'black', fill = 'transparent'), 
    legend.key = element_rect(fill = 'transparent'), legend.text = element_text(size = 10), 
    axis.title = element_text(size = 12), axis.text = element_text(size = 10))

p

#xlim()和ylim()可設(shè)置坐標(biāo)展示范圍恒傻,使圖左右對稱
p <- p + xlim(-12, 12) + ylim(0, 35)

p
調(diào)整主題后的示例脸侥,比剛才美觀許多
#例如先前根據(jù) fold change ≥ 2 以及 padj < 0.01 篩選的顯著差異基因
#也就對應(yīng)了 |log2FoldChange| ≥ 1 以及 -log10(padj) > 2 的閾值
#geom_vline()和geom_hline(),在圖中繪制垂線指示閾值線
p <- p +
geom_vline(xintercept = c(-1, 1), lty = 3, color = 'black') +
geom_hline(yintercept = 2, lty = 3, color = 'black')

p
添加差異基因篩選時(shí)的閾值線

特殊基因的標(biāo)識

那么盈厘,如果有一些特別重要的基因睁枕,想在圖中標(biāo)識出它們的名稱,應(yīng)該怎樣做呢沸手?

繼續(xù)來看這個(gè)示例外遇,示例數(shù)據(jù)“top5_gene.txt”是選擇的5個(gè)重要基因的名稱,將根據(jù)這些名稱在圖中定位基因并將它們的名稱顯示出來契吉。

本文的所有測試數(shù)據(jù)和R代碼跳仿,可在文末獲取。

#標(biāo)識特定的基因栅隐,使用 ggplot2 的拓展包 ggrepel 來完成
library(ggrepel)

lab <- read.table('top5_gene.txt', header = TRUE, sep = '\t')
dat_select <- subset(dat, gene_id %in% lab$gene_id)  #根據(jù)重要的基因名稱在原數(shù)據(jù)中提取它們的 log2FC 和 padj 值

p +  #并將這幾個(gè)基因名稱塔嬉,根據(jù)坐標(biāo)位置添加在原圖中
geom_text_repel(data = dat_select, aes(x = log2FoldChange, y = -log10(padj), label = gene_id),
    size = 3, show.legend = FALSE)
在圖中標(biāo)識重要的基因名稱玩徊,ggrepel包的好處是可以防止標(biāo)簽重疊



師兄:如何租悄,get到了嗎?
師弟:厲害厲害恩袱,從概念到分析再到作圖泣棋,都一并包含了,點(diǎn)贊畔塔!


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末潭辈,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子澈吨,更是在濱河造成了極大的恐慌把敢,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谅辣,死亡現(xiàn)場離奇詭異修赞,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)桑阶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進(jìn)店門柏副,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蚣录,你說我怎么就攤上這事割择。” “怎么了萎河?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵荔泳,是天一觀的道長蕉饼。 經(jīng)常有香客問我,道長玛歌,這世上最難降的妖魔是什么椎椰? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮沾鳄,結(jié)果婚禮上慨飘,老公的妹妹穿的比我還像新娘。我一直安慰自己译荞,他們只是感情好瓤的,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著吞歼,像睡著了一般圈膏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上篙骡,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天稽坤,我揣著相機(jī)與錄音,去河邊找鬼糯俗。 笑死尿褪,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的得湘。 我是一名探鬼主播杖玲,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼淘正!你這毒婦竟也來了摆马?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤鸿吆,失蹤者是張志新(化名)和其女友劉穎囤采,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惩淳,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蕉毯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了黎泣。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恕刘。...
    茶點(diǎn)故事閱讀 40,680評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖抒倚,靈堂內(nèi)的尸體忽然破棺而出褐着,到底是詐尸還是另有隱情,我是刑警寧澤托呕,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布含蓉,位于F島的核電站频敛,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏馅扣。R本人自食惡果不足惜斟赚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望差油。 院中可真熱鬧拗军,春花似錦、人聲如沸蓄喇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽妆偏。三九已至刃鳄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間钱骂,已是汗流浹背叔锐。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留见秽,地道東北人愉烙。 一個(gè)月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像张吉,于是被迫代替她去往敵國和親齿梁。 傳聞我的和親對象是個(gè)殘疾皇子催植,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內(nèi)容