進(jìn)化樹(shù)的可視化軟件非常多江醇,其中R包 ggtree 功能非常強(qiáng)大润梯,非常靈活质况,簡(jiǎn)單記錄自己的學(xué)習(xí)筆記
第一步:使用 mafft 比對(duì)氨基酸序列
mafft --auto ggtree_pra_2.fasta > ggtree_pra_aligned.fasta
第二步:使用 FastTree 構(gòu)建最大似然樹(shù)
./FastTree ggtree_pra_aligned.fasta > ggtree_pra.tree
(以最簡(jiǎn)單的方式完成建樹(shù)過(guò)程横堡,因?yàn)橹饕康氖谦@得樹(shù)文件來(lái)進(jìn)行g(shù)gtree的學(xué)習(xí),實(shí)際的建樹(shù)過(guò)程應(yīng)該比這個(gè)復(fù)雜的多谴返,自己還有好多地方需要進(jìn)一步的學(xué)習(xí))
getwd()#查看當(dāng)前工作路徑
setwd("../Python_practice/a_kind_of/")#更改至樹(shù)文件所在路徑
library(ggtree)#加載ggtree
tree<-read.tree("ggtree_pra.tree")#讀入樹(shù)文件
ggtree(tree)#繪制進(jìn)化樹(shù)
(以上就是最基本的步驟)
接下來(lái)就是美化進(jìn)化樹(shù)需要用到的參數(shù)煞肾,比如用color,size,linetype調(diào)整線的顏色,粗細(xì)嗓袱,線型等(和ggplot2很像或者說(shuō)一樣)籍救,可以加上branch.length="none"讓枝的末端齊平,用layout=""參數(shù)更改樹(shù)的形狀渠抹,最常用的應(yīng)該是layout="circular",更多地參數(shù)可用通過(guò)help(package="ggtree")命令來(lái)查看幫助文檔蝙昙,幫助文檔非常詳細(xì);可以通過(guò) geom_tiplab() 函數(shù)添加用于構(gòu)樹(shù)序列的名稱(應(yīng)該有專業(yè)名詞梧却,但自己想不起來(lái)叫啥了)奇颠,geom_tiplab()函數(shù)可以用size參數(shù)來(lái)調(diào)節(jié)字體的大小,用hjust參數(shù)調(diào)節(jié)文字與枝末端的距離放航;繪制圓形樹(shù)的時(shí)候需要加上aes(angle=angle)參數(shù)改變文字的角度烈拒。大家可能會(huì)發(fā)現(xiàn)還有一個(gè)函數(shù)是 geom_tiplab2(), 它和geom_tiplab()的主要區(qū)別就是繪制圓形的進(jìn)化樹(shù)時(shí)文字的方向; 有時(shí)用Rstudio查看繪圖結(jié)果時(shí)可能會(huì)顯示不完全三椿,這時(shí)可以用 xlim() 函數(shù)來(lái)調(diào)節(jié)圖片右邊的空白區(qū)域大小缺菌。可以比較一下以下命令出圖的差別:
ggtree(tree)+geom_tiplab()
ggtree(tree,branch.length="none")+geom_tiplab()
ggtree(tree,branch.length="none")+geom_tiplab(hjust=-0.05)
ggtree(tree,branch.length="none")+geom_tiplab()+xlim(NA,18)#xlim()函數(shù)里數(shù)值的大小可能得根據(jù)自己的樹(shù)文件來(lái)確定
ggtree(tree,layout="circular")
ggtree(tree,layout="circular")+geom_tiplab()
ggtree(tree,layout="circular")+geom_tiplab(aes(angle=angle))
ggtree(tree,layout="circular",branch.length="none")+geom_tiplab(aes(angle=angle))
ggtree(tree,layout="circular",branch.length="none")+geom_tiplab2(aes(angle=angle))
接下來(lái)是給按不同的分組添加不同的顏色
首先是在樹(shù)上顯示出節(jié)點(diǎn)的位置
p1<-ggtree(tree,branch.length="none")+geom_tiplab(hjust=-0.1)+xlim(NA,18)
p1+geom_text2(aes(label=node))
p1+geom_text2(aes(subset=!isTip,label=node))#注意結(jié)果圖的區(qū)別
使用geom_text2()函數(shù)添加 bootstrap values
p1+geom_text2(aes(subset=!isTip,label=support))#添加bootstrap values在最開(kāi)始讀入樹(shù)文件的時(shí)候可能得該用read.newick()函數(shù)搜锰;tree<-read.newick("input.tree",node.label="support")
p1+geom_hilight(node=51,fill="red")+geom_hilight(node=43,fill="blue")#geom_hilight()函數(shù)添加色塊
p1+geom_cladelabel(node=51,label="label one")#geom_cladelabel()函數(shù)在枝的末端添加線段和文字,node參數(shù)設(shè)置線段的位置耿战,label參數(shù)設(shè)置的是添加文字的內(nèi)容蛋叼,color參數(shù)改變線和字的顏色,barsize參數(shù)改變線的粗細(xì)剂陡,angle參數(shù)改變文字的角度狈涮,offset參數(shù)改變線段和枝末端的距離,hjust參數(shù)改變添加的label和線段的距離鸭栖,fontsize改變label的大小
p1+geom_strip(39,49,barsize=4,color="red")#geom_strip()函數(shù)在節(jié)點(diǎn)之間添加線段歌馍,參數(shù)和geom_cladelabel()很多一樣的地方,alpha參數(shù)用來(lái)設(shè)置線段的透明度
p1+geom_point2(aes(subset=!isTip))#geom_point2()函數(shù)可以在節(jié)點(diǎn)上添加點(diǎn)晕鹊,可以通過(guò)shape和color等參數(shù)改變點(diǎn)的形狀和顏色松却;subset=!isTip這個(gè)參數(shù)設(shè)置的是只在內(nèi)部節(jié)點(diǎn)打點(diǎn)暴浦,而枝的末端不添加點(diǎn)
接下來(lái)重復(fù) ggtree 的作者寫(xiě)的一個(gè)教程?bootstrap value 分段標(biāo)記
原教程貼出了完整的代碼,但是沒(méi)有給出樹(shù)文件晓锻,貼出自己用到的樹(shù)文件百度云鏈接密碼:vs4p
(本次用到的文件與原教程的bootstrap value范圍不一樣歌焦,本次用到的樹(shù)文件的bootstrap value在0:1所以用cut函數(shù)分割的時(shí)候需要注意)
(遇到的問(wèn)題,在一些論文中砚哆,進(jìn)化樹(shù)樹(shù)上只添加bootstrap value大于75或者80的節(jié)點(diǎn)独撇,這一點(diǎn)用ggtree如何實(shí)現(xiàn)暫時(shí)還沒(méi)有找到解決方案)
(問(wèn)題:圖例上不知為什么會(huì)有NA存在)
原文的教程將點(diǎn)的顏色設(shè)置成了灰白黑,看起來(lái)可能更美觀躁锁!
還有在枝頂點(diǎn)根據(jù)物種不同添加不同的形狀纷铣,今天有點(diǎn)困了,明天補(bǔ)充上战转!