Tree 浓缩系统发育树
我试图浓缩(简化所有叶子都有相同标签的分支)phyloxml格式的系统发育树。一个名为Newick Utils的程序非常有用,可以使用Newick格式树来实现这一点,它可以压缩此树: 在这一点上: 当我最终尝试将我的基因树拆分为每个复制节点上的所有子树时,这是一种在不丢失信息的情况下减少子树数量的有用方法Tree 浓缩系统发育树,tree,biopython,phylogeny,Tree,Biopython,Phylogeny,我试图浓缩(简化所有叶子都有相同标签的分支)phyloxml格式的系统发育树。一个名为Newick Utils的程序非常有用,可以使用Newick格式树来实现这一点,它可以压缩此树: 在这一点上: 当我最终尝试将我的基因树拆分为每个复制节点上的所有子树时,这是一种在不丢失信息的情况下减少子树数量的有用方法 有人知道用phyloxml树实现这一点的方法吗?Newick Utils只接受Newick格式,因此我需要一种使用Biopython解析phyloxml格式的方法。谢谢。作为快速回答,您可
有人知道用phyloxml树实现这一点的方法吗?Newick Utils只接受Newick格式,因此我需要一种使用Biopython解析phyloxml格式的方法。谢谢。作为快速回答,您可以非常轻松地将phyloxml转换为newick:
from Bio import Phylo
Phylo.convert("original.xml", "phyloxml", "converted.newick", "newick")
现在您可以调用Newick Utils来压缩树
如果要删除同名的叶,请执行以下操作:
for clade in tree.find_clades():
if clade.count_terminals() > 1:
leafs = clade.get_terminals()
if len(set([t.name for t in leafs])) == 1:
# All the leafs in this clade have the same name.
# Cut them all except the first one.
for leaf in leafs[1:]:
tree.prune(leaf)
理想情况下,您可以将上述代码放在一个返回新修剪树的函数中,并在每次修剪叶子时调用该函数。我确实尝试过转换为Newick(承认使用的是Archoeopteryx而不是biopython),但当我转换回phyloxml时,丢失了很多信息(我需要在子树拆分过程中使用我的树)。最重要的是,我丢失了“事件”标记,该标记指示是否发生了物种形成或复制。因为这是我拆分树的基础(使用if clades.events.replication),我想在这种情况下,这不是一个理想的解决方案?@spiral01,查看答案中的加法。