在生物信息學(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()
加載所需的包:ggplot2、ggtree和colorspace。
-
定義變量:
-
treFile:進(jìn)化樹文件的路徑。 -
groupFile:樹枝分類的屬性文件路徑。 -
outFile:輸出文件的路徑。
-
-
讀取屬性文件,并將屬性信息保存到
cls列表中。-
cls:一個列表,以屬性值(例如“phylum”)作為鍵,對應(yīng)的樣本編號列表作為值。
-
-
讀取進(jìn)化樹文件,并根據(jù)屬性文件合并屬性信息到樹中。
-
tree:從進(jìn)化樹文件中讀取的進(jìn)化樹對象。 -
groupOTU:自定義函數(shù),用于將屬性信息合并到進(jìn)化樹中的葉節(jié)點(OTU)。
-
-
繪制進(jìn)化樹:
- 使用
ggtree函數(shù)繪制樹,設(shè)置布局為圓形(layout="circular")。 -
ladderize = F:不對樹進(jìn)行階梯化處理。 -
branch.length="none":不顯示分支長度。 - 使用
aes(color=group)對樹的分支進(jìn)行著色,著色的屬性為group。
- 使用
-
設(shè)置顏色:
- 使用
scale_color_manual手動設(shè)置顏色映射,使用rainbow_hcl函數(shù)生成不同類別的顏色,類別數(shù)為phylumNum+1(屬性值的數(shù)量加一,為了保證顏色不重復(fù))。 -
breaks=phylumNames, labels=phylumNames:設(shè)置顏色映射的標(biāo)簽,即屬性值的名稱。
- 使用
設(shè)置圖例位置為右側(cè)(
theme(legend.position="right"))。使用
geom_text添加文本標(biāo)簽,標(biāo)簽內(nèi)容為label,并根據(jù)angle+45設(shè)置標(biāo)簽的角度偏移,size=2設(shè)置標(biāo)簽的大小。最后,將繪制的圖保存為PDF文件(
pdf(file=outFile, width=8, height=8)),并關(guān)閉繪圖設(shè)備(dev.off())。
