如何基于edge.length使用phytools为系统发育树分支分状态着色
按分支长度片段着色系统发育树的解决方案
要实现按分支长度(比如以0.7为界限)给分支中间部分着色,你可以借助phytools包的splitEdge()函数先拆分目标分支,再用paintBranches()为拆分后的片段单独着色,具体步骤如下:
步骤1:加载包并生成示例树
library(ape) library(phytools) # 生成示例树 tree <- rtree(4) # 查看分支ID和对应长度,确认目标分支(比如这里用edge=4) print(tree$edge) print(tree$edge.length)
步骤2:拆分目标分支
使用splitEdge()将目标分支在指定长度位置拆分为两段。这里以edge=4为例,拆分点距离祖先节点0.7的位置:
# 拆分分支:参数split为距离祖先节点的长度 split_tree <- splitEdge(tree, edge=4, split=0.7)
注意:
split的数值必须小于目标分支的原始长度,否则会触发警告。
步骤3:为拆分后的片段着色
拆分后,原分支会被拆分为两条新分支,你可以为其中一段设置着色状态:
# 查看拆分后的分支列表,找到新增的分支(通常是最后一条edge) print(split_tree$edge) # 为拆分后的后半段分支设置状态"1",其余保持默认状态"0" split_tree_painted <- paintBranches(split_tree, edge=nrow(split_tree$edge), state="1", anc.state="0") # 绘制着色后的树,指定颜色对应关系 plotSimmap(split_tree_painted, lwd=4, colors=c("black", "red"))
这样就能实现仅让目标分支的指定长度片段变为红色的需求。
内容的提问来源于stack exchange,提问作者Carlo Meloni
相关产品推荐
相关产品推荐

