ggtree:一款強(qiáng)大的R語言繪制生物進(jìn)化樹工具

在生物信息學(xué)和進(jìn)化生物學(xué)領(lǐng)域,樹狀圖(phylogenetic trees)是用來表示物種之間進(jìn)化關(guān)系的重要工具。ggtree是一個基于ggplot2的R包,專門用于可視化進(jìn)化樹,支持多種樹狀圖的格式,如Newick、Nexus、PhyloXML等,它不僅能繪制基礎(chǔ)的進(jìn)化樹,還能結(jié)合數(shù)據(jù)在樹上進(jìn)行注釋和高級自定義,是進(jìn)化分析中不可或缺的工具之一。

安裝ggtree

要安裝ggtree,你需要先確保已經(jīng)安裝了R和Bioconductor。ggtree作為Bioconductor的一部分,可以通過以下命令安裝:

if (!requireNamespace("BiocManager", quietly = TRUE))
    install.packages("BiocManager")

BiocManager::install("ggtree")

ggtree使用示例

接下來,我們將通過幾個不同的例子來展示ggtree的強(qiáng)大功能。

示例1:基礎(chǔ)進(jìn)化樹繪制

首先,我們需要一個進(jìn)化樹的數(shù)據(jù)。這里,我們使用ggtree自帶的一個示例數(shù)據(jù)集。

library(ggtree)
tree <- rtree(10) # 生成一個包含10個物種的隨機(jī)進(jìn)化樹
ggtree(tree) + geom_tiplab() # 繪制進(jìn)化樹,并在末端添加物種標(biāo)簽

[圖片上傳中...(image.png-1a95f8-1712712160088-0)]

這段代碼會生成一個基礎(chǔ)的進(jìn)化樹,每個物種在樹的末端都有標(biāo)簽。


示例2:進(jìn)化樹上添加注釋

ggtree支持在進(jìn)化樹上添加多種注釋,比如高亮某些分支、添加圖形標(biāo)記等。

ggtree(tree) +
  geom_tiplab() +
  geom_highlight(node=5, fill="lightblue") + # 高亮顯示編號為5的節(jié)點
  geom_nodelab(aes(label=node), nudge_x=0.5) # 在節(jié)點旁添加節(jié)點編號

這段代碼在基礎(chǔ)進(jìn)化樹的基礎(chǔ)上,高亮了編號為5的節(jié)點,并在每個節(jié)點旁邊添加了節(jié)點編號。


示例3:繪制圈狀圖

library("ggplot2")
library("ggtree")
library("colorspace")
treFile="input.tre"           #進(jìn)化樹文件
groupFile="group.txt"         #樹枝分類
outFile="tree.pdf"            #輸出

#讀取屬性文件,把屬性信息保存到list
cls=list()
rt=read.table(groupFile,sep="\t",header=T)
for(i in 1:nrow(rt)){
    otu=as.character(rt[i,1])
    phylum=as.character(rt[i,2])
    cls[[phylum]]=c(cls[[phylum]], otu)
}
phylumNames=names(cls)
phylumNum=length(phylumNames)

#讀取進(jìn)化樹文件,和屬性文件合并
tree=read.tree(treFile)
tree=groupOTU(tree, cls)

#繪制
pdf(file=outFile, width=8, height=8)
ggtree(tree, 
       layout="circular", 
       ladderize = F, 
       branch.length="none", 
       aes(color=group)) + 
       scale_color_manual(values=c(rainbow_hcl(phylumNum+1)),breaks=phylumNames, labels=phylumNames ) + 
       theme(legend.position="right") + 
       geom_text(aes(label=paste("                ",label,sep=""), 
       angle=angle+45), 
       size=2)
dev.off()

  1. 加載所需的包:ggplot2、ggtree和colorspace。

  2. 定義變量:

    • treFile:進(jìn)化樹文件的路徑。
    • groupFile:樹枝分類的屬性文件路徑。
    • outFile:輸出文件的路徑。
  3. 讀取屬性文件,并將屬性信息保存到cls列表中。

    • cls:一個列表,以屬性值(例如“phylum”)作為鍵,對應(yīng)的樣本編號列表作為值。
  4. 讀取進(jìn)化樹文件,并根據(jù)屬性文件合并屬性信息到樹中。

    • tree:從進(jìn)化樹文件中讀取的進(jìn)化樹對象。
    • groupOTU:自定義函數(shù),用于將屬性信息合并到進(jìn)化樹中的葉節(jié)點(OTU)。
  5. 繪制進(jìn)化樹:

    • 使用ggtree函數(shù)繪制樹,設(shè)置布局為圓形(layout="circular")。
    • ladderize = F:不對樹進(jìn)行階梯化處理。
    • branch.length="none":不顯示分支長度。
    • 使用aes(color=group)對樹的分支進(jìn)行著色,著色的屬性為group。
  6. 設(shè)置顏色:

    • 使用scale_color_manual手動設(shè)置顏色映射,使用rainbow_hcl函數(shù)生成不同類別的顏色,類別數(shù)為phylumNum+1(屬性值的數(shù)量加一,為了保證顏色不重復(fù))。
    • breaks=phylumNames, labels=phylumNames:設(shè)置顏色映射的標(biāo)簽,即屬性值的名稱。
  7. 設(shè)置圖例位置為右側(cè)(theme(legend.position="right"))。

  8. 使用geom_text添加文本標(biāo)簽,標(biāo)簽內(nèi)容為label,并根據(jù)angle+45設(shè)置標(biāo)簽的角度偏移,size=2設(shè)置標(biāo)簽的大小。

  9. 最后,將繪制的圖保存為PDF文件(pdf(file=outFile, width=8, height=8)),并關(guān)閉繪圖設(shè)備(dev.off())。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容