在生物信息学和进化生物学领域,树状图(phylogenetic trees)是用来表示物种之间进化关系的重要工具。ggtree
是一个基于ggplot2
的R包,专门用于可视化进化树,支持多种树状图的格式,如Newick、Nexus、PhyloXML等,它不仅能绘制基础的进化树,还能结合数据在树上进行注释和高级自定义,是进化分析中不可或缺的工具之一。
安装ggtree
要安装ggtree
,你需要先确保已经安装了R和Bioconductor。ggtree
作为Bioconductor的一部分,可以通过以下命令安装:
if (!requireNamespace("BiocManager", quietly = TRUE))
install.packages("BiocManager")
BiocManager::install("ggtree")
ggtree使用示例
接下来,我们将通过几个不同的例子来展示ggtree
的强大功能。
示例1:基础进化树绘制
首先,我们需要一个进化树的数据。这里,我们使用ggtree
自带的一个示例数据集。
library(ggtree)
tree <- rtree(10) # 生成一个包含10个物种的随机进化树
ggtree(tree) + geom_tiplab() # 绘制进化树,并在末端添加物种标签
[图片上传中...(image.png-1a95f8-1712712160088-0)]
这段代码会生成一个基础的进化树,每个物种在树的末端都有标签。
示例2:进化树上添加注释
ggtree
支持在进化树上添加多种注释,比如高亮某些分支、添加图形标记等。
ggtree(tree) +
geom_tiplab() +
geom_highlight(node=5, fill="lightblue") + # 高亮显示编号为5的节点
geom_nodelab(aes(label=node), nudge_x=0.5) # 在节点旁添加节点编号
这段代码在基础进化树的基础上,高亮了编号为5的节点,并在每个节点旁边添加了节点编号。
示例3:绘制圈状图
library("ggplot2")
library("ggtree")
library("colorspace")
treFile="input.tre" #进化树文件
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)
#读取进化树文件,和属性文件合并
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
:进化树文件的路径。 -
groupFile
:树枝分类的属性文件路径。 -
outFile
:输出文件的路径。
-
-
读取属性文件,并将属性信息保存到
cls
列表中。-
cls
:一个列表,以属性值(例如“phylum”)作为键,对应的样本编号列表作为值。
-
-
读取进化树文件,并根据属性文件合并属性信息到树中。
-
tree
:从进化树文件中读取的进化树对象。 -
groupOTU
:自定义函数,用于将属性信息合并到进化树中的叶节点(OTU)。
-
-
绘制进化树:
- 使用
ggtree
函数绘制树,设置布局为圆形(layout="circular"
)。 -
ladderize = F
:不对树进行阶梯化处理。 -
branch.length="none"
:不显示分支长度。 - 使用
aes(color=group)
对树的分支进行着色,着色的属性为group
。
- 使用
-
设置颜色:
- 使用
scale_color_manual
手动设置颜色映射,使用rainbow_hcl
函数生成不同类别的颜色,类别数为phylumNum+1
(属性值的数量加一,为了保证颜色不重复)。 -
breaks=phylumNames, labels=phylumNames
:设置颜色映射的标签,即属性值的名称。
- 使用
-
设置图例位置为右侧(
theme(legend.position="right")
)。 -
使用
geom_text
添加文本标签,标签内容为label
,并根据angle+45
设置标签的角度偏移,size=2
设置标签的大小。 -
最后,将绘制的图保存为PDF文件(
pdf(file=outFile, width=8, height=8)
),并关闭绘图设备(dev.off()
)。
网友评论