我试图压缩(简化所有叶子具有相同标签的进化枝)系统发育树,采用phyloxml格式。一个名为Newick Utils的程序对于使用newick格式树执行此操作非常有用,它会缩小这个树:
进入这一个:
由于我最终试图将我的基因树拆分成每个复制节点的所有子树,这是减少子树数量而不丢失信息的有用方法。
有没有人知道用phyloxml树做这个的方法? Newick Utils只接受Newick格式,所以我需要一种方法来使用Biopython解析phyloxml格式。感谢。
答案 0 :(得分:2)
作为一个快速回答,您可以非常轻松地将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)
理想情况下,您将上面的代码放在一个返回新修剪树的函数中,并在每次修剪叶子时调用该函数。