如何用R语言从Newick树生成时间进化树(Chronogram)
使用R语言绘制带节点时间阶段标注的灭绝类群系统发育树
以下是具体实现步骤,基于常用的系统发育树分析包ape和可视化包ggtree(更灵活的ggplot2风格):
1. 安装并加载必要的R包
首先安装所需工具包(首次运行时执行),然后加载:
install.packages(c("ape", "ggtree", "dplyr")) library(ape) library(ggtree) library(dplyr)
2. 读取Newick格式的树文件
用ape包的read.tree()函数读取你的自定义树文件:
# 替换为你的树文件路径 tree <- read.tree("your_extinct_group_tree.newick")
3. 准备节点时间阶段数据
你需要提前整理好每个内部节点对应的时间阶段信息,格式为包含node(节点编号)和time_stage(时间阶段名称)的数据框。
注意:R中系统发育树的节点编号规则:终端节点编号从1到物种数量(length(tree$tip.label)),内部节点从物种数量+1开始,直到2*length(tree$tip.label)-1。你可以先运行以下代码查看节点编号:
# 绘制树并显示所有节点编号 plot(tree) nodelabels() tiplabels()
示例节点时间数据(替换为你实际的节点-时间对应关系):
node_time_df <- data.frame( node = c(6, 7, 8, 9), # 对应你的内部节点编号 time_stage = c("寒武纪晚期", "奥陶纪早期", "志留纪", "泥盆纪") # 对应时间阶段 )
4. 绘制带时间标注的可视化树
方法一:使用ggtree(推荐,样式更灵活)
ggtree基于ggplot2,支持丰富的自定义样式:
# 绘制基础树,可选布局:rectangular(矩形)、circular(圆形)、slanted(斜向)等 p <- ggtree(tree, layout = "rectangular", edge.width = 1.2) + geom_tiplab(size = 3, align = TRUE) + # 添加终端物种标签 geom_nodelab( aes(label = time_stage), data = node_time_df, size = 2.8, color = "#d9534f", hjust = -0.1 # 调整标注位置,避免与节点重叠 ) # 如果你的树是时间校准过的(分支长度代表时间),可以添加时间轴: p <- p + theme_tree2() + scale_x_continuous(breaks = seq(0, 500, 50)) # 输出图形 print(p)
方法二:使用ape包的基础绘图
如果你习惯基础绘图风格,可直接用ape的函数:
# 绘制系统发育树 plot(tree, type = "phylogram", edge.width = 1.5, cex = 0.8) # 添加节点时间标注 nodelabels( text = node_time_df$time_stage, node = node_time_df$node, col = "#d9534f", cex = 0.7, adj = c(0, 0.5) # 调整标注位置 ) # 添加终端物种标签(默认已显示,可调整) tiplabels(cex = 0.8)
5. 自定义调整(可选)
- 若标注重叠,可调整
hjust/vjust(ggtree)或adj(ape)参数,或使用ggtree的geom_nodelab_repel()函数自动避免重叠:p <- p + geom_nodelab_repel(aes(label = time_stage), data = node_time_df, size = 2.8, color = "#d9534f") - 可修改树的颜色、分支粗细、标签字体等参数,适配你的展示需求。
内容的提问来源于stack exchange,提问作者ItaiVF
相关产品推荐
相关产品推荐

