压缩系统发育树

Condensing phyloxml phylogenetic trees

我正在尝试压缩(简化所有叶子都具有相同标签的进化枝)phyloxml 格式的系统发育树。一个叫做 Newick Utils 的程序对于用 newick 格式树做这个非常有用,压缩这棵树:

Original Tree

进入这个:

Condensed tree

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

有谁知道用 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)

理想情况下,您会将上述代码放在 returns 新修剪树的函数中,并在每次修剪叶子时调用该函数。