基于全基因組的基因家族分析(4):R包ggtree構(gòu)建SlNramp家族進(jìn)化樹

cherry tomato.jpg

繼續(xù)之前還沒有完成的內(nèi)容形病。因?yàn)樽罱趯W(xué)習(xí)Y叔的R包--ggtree誊涯,所以就順便拿這個(gè)內(nèi)容來進(jìn)行展示侍匙,作為一個(gè)例子來記錄迈喉。nwk樹文件和R代碼文件我已經(jīng)放在github:https://github.com/Lxmic/ggtree_note

1. ggtree安裝

關(guān)于這個(gè)包集歇,y叔已經(jīng)寫了相當(dāng)詳細(xì)的說明桶略,有一個(gè)完整的電子書《Data Integration, Manipulation and Visualization of Phylogenetic Trees》。這個(gè)包是在Bioconductor上面诲宇,有非常詳細(xì)的介紹际歼,可以去查找相關(guān)的內(nèi)容。

#安裝相關(guān)的包姑蓝,包括ggtree以及ggplot2
#對(duì)于R版本在3.6及以上的鹅心,需要使用BiocManager包來安裝bioconductor上的包
if (!requireNamespace("BiocManager", quietly = TRUE))
    install.packages("BiocManager")

BiocManager::install("ggtree")
#ggplot2安裝
install.packages("ggplot2")
#載入兩個(gè)包
library(ggplot2)
library(ggtree)

2. 讀取及可視化樹結(jié)構(gòu)

關(guān)于用什么算法以及什么軟件來構(gòu)建你自己需要的樹,完全看個(gè)人的需要纺荧,y叔在電子文檔《Data Integration, Manipulation and Visualization of Phylogenetic Trees》中有很詳細(xì)的介紹各種樹以及各種算法旭愧,有興趣了解一下(反正我是看不太懂)。我就用最簡(jiǎn)單宙暇,最常用的方法來獲得進(jìn)化樹——MEGA軟件榕茧,可以輸出newick格式的樹,非常常用的進(jìn)化樹文件(我們需要保存其bootstrap值以及branch.length值)客给。

# 讀取newick樹用押,在當(dāng)前工作目錄中的nramp.nwk文件,并賦值給tree
tree <- read.newick("nramp.nwk")
# 可視化樹結(jié)構(gòu)靶剑,這里用環(huán)形樹來展示
p1 <- ggtree(tree, layout = "circular", branch.length = "none")
# 將進(jìn)化樹打印出來顯示
print(p1)
# 如果要將branch.length展示蜻拨,那么只需要?jiǎng)h除branch.length = "none"
p2 <- ggtree(tree, layout="circular")
# 可以看到,目前的進(jìn)化樹還沒有tiplab桩引,因此我們需要添加lab缎讼,跟ggplot2一樣,再添加一個(gè)圖層坑匠,就可以實(shí)現(xiàn)血崭。
p3 <- p1 + geom_tiplab2(color="seagreen", size = 3, hjust = -.2)+xlim(NA, 22)
print(p3)
# 此外,我們通常需要給樹的某個(gè)node來添加背景色高亮顯示,也只需要通過一個(gè)函數(shù)添加圖層夹纫。一般首先我們要了解節(jié)點(diǎn)ID咽瓷,要知道你需要高亮顯示的節(jié)點(diǎn)。
#顯示進(jìn)化樹的節(jié)點(diǎn)ID
p4 <- p3 + geom_text2(aes(label=node))
print(p4)
#為一部分樹添加背景顏色舰讹,著重顯示
p5 <- p3 + geom_hilight(node = 33, fill = "red", alpha = 0.6)
print(p5)
#打印所有圖片茅姜,這里還需要安裝一個(gè)cowplot包,用來排版的
install.packages("cowplot")
plot_grid(p1, p2, p3, p4 ,p5, ncol=3, labels=c("A","B", "C", "D", "E"))

p1,p2,p3,p4 and p5

3. 進(jìn)化樹修飾

對(duì)于iTOLs這個(gè)進(jìn)化樹修飾軟件月匣,雖然功能也強(qiáng)大钻洒,但是我本身用起來還是覺得很費(fèi)事,而且各種配置文件很多锄开,感覺有點(diǎn)頭大素标,真是傷不起,重復(fù)性不高萍悴。由于這個(gè)原因糯钙,我還是決定學(xué)習(xí)R包-ggtree,今天就進(jìn)一步來修飾一下進(jìn)化樹退腥,使其變得更加美觀一些。用代碼來修飾進(jìn)化樹再榄,重復(fù)性可想而知狡刘,非常節(jié)省時(shí)間。

-對(duì)一些參數(shù)進(jìn)行說明
函數(shù)geom_tiplab2()是用來添加taxa的label的困鸥,也就是你的基因名嗅蔬。還有一個(gè)基本相同的用來給矩形樹添加label的geom_tiplab()。這兩個(gè)函數(shù)區(qū)別在前者可以根據(jù)樹來自動(dòng)調(diào)整角度疾就,來達(dá)到比較好的可讀性澜术。我這里畫的圈圖,就適合用前者猬腰。

# 這個(gè)p6跟上面的圖C是一樣的鸟废,就是我改變來它的xlim的范圍,為了后面添加strip姑荷,需要控制xlim盒延。
# size是字體大小,color是字體顏色鼠冕,hjust是距離節(jié)點(diǎn)的距離添寺。
p6 <- ggtree(tree, layout = "circular", branch.length = "none")
+geom_tiplab2(color = "seagreen",  size=3, hjust=-.05)
+ xlim(NA, 20)
print(p6)
p61 <- ggtree(tree, layout = "circular", branch.length = "none", )+geom_tiplab2(color = "red",  size=2, hjust=-.1)+ xlim(NA, 20)
print(p61)
plot_grid(p6, p61, ncol = 2, labels = c("F","G"))
改變顏色和字體大小
  • 進(jìn)化樹基本都會(huì)聚類成幾個(gè)分支,對(duì)于基因家族懈费,就可以相應(yīng)的進(jìn)行亞家族分類计露,下面就用文獻(xiàn)中常見的strip來將進(jìn)化樹進(jìn)一步分類。在ggtree中對(duì)應(yīng)的函數(shù)是geom_strip(),下面我們來看具體的代碼以及參數(shù)票罐。
  • geom_strip()函數(shù)可以在進(jìn)化樹的外圍來添加具有色彩的條帶叉趣。根據(jù)圖d中的節(jié)點(diǎn),我們來進(jìn)行相應(yīng)的添加胶坠。其中的前兩個(gè)數(shù)字就是對(duì)應(yīng)的節(jié)點(diǎn)(taxa1taxa2)君账,從起始到結(jié)束。barsize就是色塊的寬度沈善, 以及color就是色塊顏色乡数。
  • offset就是距離節(jié)點(diǎn)的位置,這個(gè)參數(shù)就需要和之前的xlim進(jìn)行配合闻牡,才能夠?qū)⑸珘K放到合適的位置净赴,不會(huì)和 tiplab互相覆蓋。這里的label就是色塊想塊的名字罩润,也就分類名例如Clade I這種玖翅。
  • offset.text這個(gè)參數(shù)是來調(diào)整label的位置的,它的起始位置就是strip開始的割以,而不是taxa開始的金度。extend是用來調(diào)整色塊之間的間隔大小,默認(rèn)是0严沥;如果是0.5的話猜极,那么正好可以將色塊拼接成一個(gè)完整的圈。
  • angle是用來調(diào)整label的角度, 默認(rèn)是0消玄,順時(shí)針就是正的數(shù)值跟伏。align在這里似乎沒有什么作用。
  • hjust= "center"的作用就是將label放置在strip的中間位置翩瓜。這么以來受扳,基本所有的問題就解決來,可以直接出比較好看的圈圖兔跌。
p7 <- p6 
+ geom_strip(14, 17, barsize = 3, color = "steelblue", offset = 7, label = "Clade I", offset.text = 1, angle = 60, fontsize = 4, hjust = "center", extend = 0.3) 
+ geom_strip(11, 13, color = "red", barsize = 3, offset = 7, label = "Clade II", offset.text = 1, angle = -15, fontsize = 4, hjust = "center", extend = 0.3) 
+ geom_strip(6, 9, color = "orange", barsize = 3, offset = 7, label = "Clade III", offset.text = 1, angle = 10, fontsize = 4, hjust = "center", extend = 0.3)
print(p7)

這里我有一個(gè)問題勘高,就是說我還不知道對(duì)于里面只有一個(gè)基因的node,我該怎么給它添加strip坟桅,因?yàn)?code>geom_strip()這個(gè)函數(shù)是需要兩個(gè)taxa來添加的相满,只有一個(gè)的條件下,我沒有辦法桦卒。而且我嘗試過將taxa1 = taxa2立美,還是沒有起作用。我已經(jīng)在ggtree group中提出來問題方灾,希望能得到解答

圈圖最終的結(jié)果

分組給分支上色

在別人的文章中建蹄,也經(jīng)常會(huì)看到將tiplabel分為不同的顏色來進(jìn)行上色碌更,以更好的區(qū)分不容的clade。例如這篇jxb關(guān)于楊樹mate家族基因分析的文章(doi:10.1093/jxb/erx370)洞慎,進(jìn)化樹的展示:


Genome-wide analysis of MATE transporters and molecular characterization of aluminum resistance in Populus

這里我先用比較麻煩的辦法來實(shí)現(xiàn)它痛单。我們只需要自己構(gòu)建一個(gè)顏色文件,然后強(qiáng)行插入到樹文件中并進(jìn)行可視化就可以完成劲腿。

  • 構(gòu)建一個(gè)顏色文件旭绒, 只要包含兩個(gè)參數(shù)就行——node和color,和之前的進(jìn)化樹的node 號(hào)一一對(duì)應(yīng)起來焦人。這樣的格式就可以了挥吵。


    顏色文件
  • 讀取這個(gè)顏色文件,我習(xí)慣用read.csv()來載入外部數(shù)據(jù)花椭。
#讓進(jìn)化樹著色忽匈,變成自己需要的顏色。先根據(jù)節(jié)點(diǎn)矿辽,構(gòu)建自己的顏色數(shù)據(jù)框
d <- read.csv("nramp_color.csv", header = TRUE)
d <- data.frame(d)
#使用`%<+%`符號(hào)強(qiáng)插入顏色數(shù)據(jù)到樹文件中
p8 <- p7%<+%d + aes(color = I(color))
ok, 大功告成
  • 如果tiplab字體顏色要改變成各種分支的顏色丹允,那么在之前的p6代碼中,去掉color就可以了或者全部改成黑色袋倔。
#變成黑色字體
p6 <- ggtree(tree, layout = "circular", branch.length = "none")+geom_tiplab2(color = "black",  size=3, hjust=-.05)+ xlim(NA, 20)
#變成相應(yīng)的彩色
p6 <- ggtree(tree, layout = "circular", branch.length = "none")+geom_tiplab2(size=3, hjust=-.05)+ xlim(NA, 20)

黑色字體
彩色字體

Summary

雖然Y叔確實(shí)寫了非常詳細(xì)的說明書雕蔽,但是對(duì)于新手來說,還是會(huì)有一定的入門難度宾娜。尤其是有些參數(shù)并沒有仔細(xì)說明用途批狐,點(diǎn)到為止。所以我自己也摸索了好久碳默,還不斷在ggtree group這個(gè)Y叔創(chuàng)建的問題論壇問問題,來一步步解決缘眶。Y叔還是解答的很及時(shí)的嘱根,經(jīng)常會(huì)馬上回答你。希望能夠幫助需要的人巷懈,同時(shí)我也能夠不斷地繼續(xù)摸索前行该抒,永無止境。

參考資料:
(1) https://yulab-smu.github.io/treedata-book/chapter4.html#introduction-1
(2) https://bioconductor.org/packages/release/bioc/manuals/ggtree/man/ggtree.pdf
(3) https://github.com/GuangchuangYu/ggtree/issues/52

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末顶燕,一起剝皮案震驚了整個(gè)濱河市凑保,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌涌攻,老刑警劉巖欧引,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異恳谎,居然都是意外死亡芝此,警方通過查閱死者的電腦和手機(jī)憋肖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來婚苹,“玉大人岸更,你說我怎么就攤上這事〔采” “怎么了怎炊?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)廓译。 經(jīng)常有香客問我评肆,道長(zhǎng),這世上最難降的妖魔是什么责循? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任糟港,我火速辦了婚禮,結(jié)果婚禮上院仿,老公的妹妹穿的比我還像新娘秸抚。我一直安慰自己,他們只是感情好歹垫,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布剥汤。 她就那樣靜靜地躺著,像睡著了一般排惨。 火紅的嫁衣襯著肌膚如雪吭敢。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天暮芭,我揣著相機(jī)與錄音鹿驼,去河邊找鬼。 笑死辕宏,一個(gè)胖子當(dāng)著我的面吹牛畜晰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播瑞筐,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼凄鼻,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了聚假?” 一聲冷哼從身側(cè)響起块蚌,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎膘格,沒想到半個(gè)月后峭范,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡瘪贱,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年虎敦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了游岳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡其徙,死狀恐怖胚迫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情唾那,我是刑警寧澤访锻,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站闹获,受9級(jí)特大地震影響期犬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜避诽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一龟虎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧沙庐,春花似錦鲤妥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至铸抑,卻和暖如春贡耽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鹊汛。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工蒲赂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人刁憋。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓滥嘴,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親职祷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子氏涩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

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