【R畫(huà)圖學(xué)習(xí)2.2】火山圖-ggplot篇

上篇測(cè)試了如何用plot來(lái)實(shí)現(xiàn)火山圖笋敞,其實(shí)通常還是強(qiáng)大的ggplot包實(shí)現(xiàn)更好夯巷。

還是用上一篇的測(cè)試數(shù)據(jù)喷兼。

library(ggplot2)

library(dplyr)

library(ggrepel)

data <- read.csv("DEG.csv",row.names=1)

##data$regulate<-ifelse(data$log2FoldChange >= 0.5 & data$pvalue < 0.05,"Up",

ifelse(data$log2FoldChange? <=-0.5 & data$pvalue < 0.05,"Down","Normal"))

注:因?yàn)檫@個(gè)測(cè)試數(shù)據(jù)中阶牍,用戶已經(jīng)自己定義了那些是up和down走孽。如果沒(méi)有的話磕瓷,自己也可以添加1列來(lái)定義

先測(cè)試,最簡(jiǎn)單的一個(gè)ggplot的命令硕盹。ggplot()用于構(gòu)造初始的plot對(duì)象瘩例,一般總是后跟+以向plot添加組件。比如今天用到的就是geom_point聘惦,添加點(diǎn)善绎,當(dāng)然也可以有線,條比勉,箱線圖和陰影區(qū)域浩聋。這個(gè)例子我們是通過(guò)geom_point()函數(shù)望ggplot()創(chuàng)建的plot對(duì)象中添加一些列的點(diǎn)衣洁。

ggplot(data, aes(log2FoldChange,-log10(pvalue)))+geom_point()

上面這個(gè)就是最簡(jiǎn)單的ggplot的呈現(xiàn)砖第。ggplot()初始呈現(xiàn)中,要指定數(shù)據(jù)來(lái)源(data)羽杰,以及變量(log2FoldChange考赛,pvalue)颜骤,變量主要通過(guò)aes來(lái)實(shí)現(xiàn)。在這里默認(rèn)情況下log2FoldChange映射到X軸,-log10(pvalue)映射到Y(jié)軸益涧,當(dāng)然也可以aes(x=log2FoldChange,y=-log10(pvalue))闲询。

當(dāng)然,我們還可以在geom_point函數(shù)中設(shè)置點(diǎn)的形狀(pch)鸽捻,大杏选(size),顏色(color)等碘箍。

ggplot(data, aes(log2FoldChange,-log10(pvalue)))+geom_point(size = 2,aes(color = regulate))

上面這個(gè)圖就是設(shè)置完大小货邓,color用用戶指定的regulate里面的up/down來(lái)進(jìn)行顏色劃分逻恐。(當(dāng)然,也可以在ggplot里面的aes指定color挽拂,比如這個(gè)效果ggplot(data, aes(x=log2FoldChange,y=-log10(pvalue),color=regulate))+geom_point()? ?和上面也是差不多的)

下面來(lái)操作添加火山圖的參考線亏栈,主要通過(guò)geom_hline和geom_vline來(lái)實(shí)現(xiàn)添加水平和垂直的添加線。其中l(wèi)inetype和size分別來(lái)控制線的類型和大小闷游。

scale_x_continuous和scale_y_continuous主要用來(lái)控制坐標(biāo)軸刻度線脐往;例如可以通過(guò)參數(shù)breaks來(lái)指定刻度標(biāo)記业簿,limits來(lái)控制x和y軸坐標(biāo)的范圍,lables來(lái)指定刻度標(biāo)記標(biāo)簽克饶。xlab和ylab來(lái)控制坐標(biāo)的名字矾湃。

ggplot(data, aes(log2FoldChange,-log10(pvalue)))+geom_point(size = 2,aes(color = regulate))+

scale_x_continuous(limits = c(-7, 7))+

scale_y_continuous(limits = c(0, 32))+

geom_hline(yintercept=-log10(0.05),linetype=4)+

geom_vline(xintercept=c(-0.5,0.5),linetype=4)+

xlab(expression("log"[2]*" fold change"))+

ylab(expression("-log"[10]*" p-value"))

最后,像plot的畫(huà)法一樣途戒,我們可能還需要highlight top的一些candidates,比如上調(diào)或者下調(diào)top5星爪,并顯示其名字。主要通過(guò)geom_label_repel函數(shù)來(lái)控制抄肖。

我們需要先挑出top的gene。挑選方法幌甘,我們用R里面的%>%通道符來(lái)實(shí)現(xiàn)鞍泉。

data %>%filter(regulate == 'Up') %>%arrange(pvalue,desc(abs(log2FoldChange))) %>%head(5)

分別是基于data,篩選regulate等于Up的gene托修,然后按照pvalue升序以及l(fā)og2FoldChange絕對(duì)值降序來(lái)排序,最后選出top 5的gene所在的行涩拙。

結(jié)果如下所示:

同樣的我們對(duì)于down的也可以進(jìn)行這樣的操作:

data %>%filter(regulate == 'Down') %>%arrange(pvalue,desc(abs(log2FoldChange))) %>%head(5)

然后合并Up和down的結(jié)果,R里面可以用bind_rows來(lái)實(shí)現(xiàn)如绸,顧名思義就是合并這2個(gè)結(jié)果中的所有行。

top<- bind_rows(

data %>%filter(regulate == 'Up') %>%arrange(pvalue,desc(abs(log2FoldChange))) %>% head(5),

data %>%filter(regulate == 'Down') %>%arrange(pvalue,desc(abs(log2FoldChange))) %>%head(5)

)

最終top的結(jié)果如下圖所示:

然后把top個(gè)gene用geom_label_repel函數(shù)添加上去:

ggplot(data, aes(log2FoldChange,-log10(pvalue)))+geom_point(size = 2,aes(color = regulate))+

scale_x_continuous(limits = c(-7, 7))+

scale_y_continuous(limits = c(0, 32))+

geom_hline(yintercept=-log10(0.05),linetype=4)+

geom_vline(xintercept=c(-0.5,0.5),linetype=4)+

xlab(expression("log"[2]*" fold change"))+

ylab(expression("-log"[10]*" p-value"))+

geom_label_repel(data = top,aes(log2FoldChange, -log10(pvalue), label = row),size = 4)

到這里谎势,火山圖的基本形狀就出來(lái)了脏榆,但是這里還有幾個(gè)問(wèn)題:一般情況下legend的排序那里都是先Up/Normal/Down,這個(gè)原因是R一般處理這些字符性質(zhì)的變量的時(shí)候是按照ASCII順序來(lái)實(shí)現(xiàn)的,我們自己就需要通過(guò)factor來(lái)手動(dòng)的調(diào)整他們的順序?yàn)槲覀兺ǔR饬x上的順序是己;

data$regulate <- factor(data$regulate,order=TRUE,levels=c("Up","Normal","Down"))

把regulate列設(shè)置成為了因子,并且人為指定了它們的排序方式摔认。從數(shù)據(jù)查看來(lái)看,regulate已經(jīng)有了相應(yīng)的順序辰企。

ggplot(data, aes(x=log2FoldChange,y=-log10(pvalue),color=regulate))+geom_point(size = 2)+

scale_x_continuous(limits = c(-7, 7))+

scale_y_continuous(limits = c(0, 32))+

geom_hline(yintercept=-log10(0.05),linetype=4)+

geom_vline(xintercept=c(-0.5,0.5),linetype=4)+

xlab(expression("log"[2]*" fold change"))+

ylab(expression("-log"[10]*" p-value"))

從圖中來(lái)看镐捧,順序已經(jīng)按照我們想要的順序排列了竹习。但是顏色目前采取的是R里面默認(rèn)的,當(dāng)我把regulate改成因子變量后泌辫,他們就又映射到了另外一個(gè)默認(rèn)的顏色空間。所以一般需要我們自己設(shè)置顏色殿遂,比如,我們想把顏色改成Up紅色饵溅,Down藍(lán)色咬荷,Normal灰色懦底。

一般通過(guò)scale_color_manual函數(shù)丐重,人為的指定相應(yīng)的顏色,我選了紅崖蜜,灰,藍(lán)色三種顏色等恐。

ggplot(data, aes(x=log2FoldChange,y=-log10(pvalue)))+geom_point(size = 2,aes(color=regulate))+

geom_hline(yintercept=-log10(0.05),linetype=4)+

geom_vline(xintercept=c(-0.5,0.5),linetype=4)+

xlab(expression("log"[2]*" fold change"))+

ylab(expression("-log"[10]*" p-value"))+

scale_color_manual(values=c("#FC4E07", "#C0C0C0","#0000FF"),name="Expression")+

geom_label_repel(data=top,aes(x=log2FoldChange, y=-log10(pvalue), label = row),size = 4)

可以看出星著,調(diào)整后的顏色就是我們想要的顏色了同欠。

但是,雖然整體該有的都有的,還是覺(jué)得坐標(biāo)軸等的字體有點(diǎn)小粮坞,需要調(diào)整字體顯得更清晰一些,字體調(diào)整一般是通過(guò)控制theme()來(lái)實(shí)現(xiàn)的筝闹。

ggplot(data, aes(x=log2FoldChange,y=-log10(pvalue)))+geom_point(size = 2,aes(color=regulate))+

scale_x_continuous(limits = c(-7, 7))+

scale_y_continuous(limits = c(0, 32))+

geom_hline(yintercept=-log10(0.05),linetype=4)+

geom_vline(xintercept=c(-0.5,0.5),linetype=4)+

xlab(expression("log"[2]*" fold change"))+

ylab(expression("-log"[10]*" p-value"))+

scale_color_manual(values=c("#FC4E07", "#C0C0C0","#0000FF"),name="Expression")+

geom_label_repel(data=top,aes(x=log2FoldChange, y=-log10(pvalue), label = row),size = 4)+

theme(text = element_text(size = 20))

這個(gè)就是對(duì)圖中所有字體都調(diào)整了。

ggplot(data, aes(x=log2FoldChange,y=-log10(pvalue)))+geom_point(size = 2,aes(color=regulate))+

scale_x_continuous(limits = c(-7, 7))+

scale_y_continuous(limits = c(0, 32))+

geom_hline(yintercept=-log10(0.05),linetype=4)+

geom_vline(xintercept=c(-0.5,0.5),linetype=4)+

xlab(expression("log"[2]*" fold change"))+

ylab(expression("-log"[10]*" p-value"))+

scale_color_manual(values=c("#FC4E07", "#C0C0C0","#0000FF"),name="Expression")+

geom_label_repel(data=top,aes(x=log2FoldChange, y=-log10(pvalue), label = row),size = 4)+

theme(axis.text = element_text(size = 20))

像這個(gè)就只改變坐標(biāo)軸上的字體,當(dāng)然也可以通過(guò)axis.text.x和axis.text.y分別改變X和Y軸。

ggplot(data, aes(x=log2FoldChange,y=-log10(pvalue)))+geom_point(size = 2,aes(color=regulate))+

scale_x_continuous(limits = c(-7, 7))+

scale_y_continuous(limits = c(0, 32))+

geom_hline(yintercept=-log10(0.05),linetype=4)+

geom_vline(xintercept=c(-0.5,0.5),linetype=4)+

xlab(expression("log"[2]*" fold change"))+

ylab(expression("-log"[10]*" p-value"))+

scale_color_manual(values=c("#FC4E07", "#C0C0C0","#0000FF"),name="Expression")+

geom_label_repel(data=top,aes(x=log2FoldChange, y=-log10(pvalue), label = row),size = 4)+

theme(axis.title = element_text(size = 30))

這樣的話,就只調(diào)控坐標(biāo)軸名稱的大小,當(dāng)然也可以通過(guò)axis.title.x/y分別改變x和y上的腻扇。

ggplot(data, aes(x=log2FoldChange,y=-log10(pvalue)))+geom_point(size = 2,aes(color=regulate))+

scale_x_continuous(limits = c(-7, 7))+

scale_y_continuous(limits = c(0, 32))+

geom_hline(yintercept=-log10(0.05),linetype=4)+

geom_vline(xintercept=c(-0.5,0.5),linetype=4)+

xlab(expression("log"[2]*" fold change"))+

ylab(expression("-log"[10]*" p-value"))+

scale_color_manual(values=c("#FC4E07", "#C0C0C0","#0000FF"),name="Expression")+

geom_label_repel(data=top,aes(x=log2FoldChange, y=-log10(pvalue), label = row),size = 4)+

theme(legend.text = element_text(size = 20))+

theme(legend.title = element_text(size = 20))

通過(guò)legend.text 和legend.title來(lái)控制圖例上面的文字和title

ggplot(data, aes(x=log2FoldChange,y=-log10(pvalue)))+geom_point(size = 2,aes(color=regulate))+

scale_x_continuous(limits = c(-7, 7))+

scale_y_continuous(limits = c(0, 32))+

geom_hline(yintercept=-log10(0.05),linetype=4)+

geom_vline(xintercept=c(-0.5,0.5),linetype=4)+

xlab(expression("log"[2]*" fold change"))+

ylab(expression("-log"[10]*" p-value"))+

scale_color_manual(values=c("#FC4E07", "#C0C0C0","#0000FF"),name="Expression")+

geom_label_repel(data=top,aes(x=log2FoldChange, y=-log10(pvalue), label = row),size = 4)+

theme(legend.text = element_text(size = 20))+

theme(legend.title = element_text(size = 20))+

theme(axis.title = element_text(size = 20))+

theme(axis.text = element_text(size = 15))

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末括荡,一起剝皮案震驚了整個(gè)濱河市畸冲,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌苫耸,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,383評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異渔扎,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)倘核,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)隶校,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)绰疤,“玉大人轻庆,你說(shuō)我怎么就攤上這事×耄” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,852評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)枢步。 經(jīng)常有香客問(wèn)我矾瑰,道長(zhǎng)殴穴,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,621評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮尊残,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘慰毅。我一直安慰自己,他們只是感情好着饥,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般挪拟。 火紅的嫁衣襯著肌膚如雪玉组。 梳的紋絲不亂的頭發(fā)上谷誓,一...
    開(kāi)封第一講書(shū)人閱讀 49,929評(píng)論 1 290
  • 那天鸵钝,我揣著相機(jī)與錄音恩商,去河邊找鬼。 笑死粟矿,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的掏秩。 我是一名探鬼主播,決...
    沈念sama閱讀 39,076評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼决乎!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起范嘱,我...
    開(kāi)封第一講書(shū)人閱讀 37,803評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤叠聋,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后厦章,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,265評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了滑蚯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片告材。...
    茶點(diǎn)故事閱讀 38,716評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡产艾,死狀恐怖隘膘,靈堂內(nèi)的尸體忽然破棺而出弯菊,到底是詐尸還是另有隱情钦铁,我是刑警寧澤牛曹,帶...
    沈念sama閱讀 34,395評(píng)論 4 333
  • 正文 年R本政府宣布鸳玩,位于F島的核電站,受9級(jí)特大地震影響躬拢,放射性物質(zhì)發(fā)生泄漏聊闯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評(píng)論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蚪腐。 院中可真熱鬧,春花似錦泡一、人聲如沸鼻忠。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,798評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)埋涧。三九已至,卻和暖如春醇坝,著一層夾襖步出監(jiān)牢的瞬間呼猪,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,027評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留壶唤,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,488評(píng)論 2 361
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像钓觉,于是被迫代替她去往敵國(guó)和親荡灾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子础锐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評(píng)論 2 350

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