Tree 浓缩系统发育树

Tree 浓缩系统发育树,tree,biopython,phylogeny,Tree,Biopython,Phylogeny,我试图浓缩(简化所有叶子都有相同标签的分支)phyloxml格式的系统发育树。一个名为Newick Utils的程序非常有用,可以使用Newick格式树来实现这一点,它可以压缩此树: 在这一点上: 当我最终尝试将我的基因树拆分为每个复制节点上的所有子树时,这是一种在不丢失信息的情况下减少子树数量的有用方法 有人知道用phyloxml树实现这一点的方法吗?Newick Utils只接受Newick格式,因此我需要一种使用Biopython解析phyloxml格式的方法。谢谢。作为快速回答,您可

我试图浓缩(简化所有叶子都有相同标签的分支)phyloxml格式的系统发育树。一个名为Newick Utils的程序非常有用,可以使用Newick格式树来实现这一点,它可以压缩此树:

在这一点上:

当我最终尝试将我的基因树拆分为每个复制节点上的所有子树时,这是一种在不丢失信息的情况下减少子树数量的有用方法


有人知道用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,查看答案中的加法。