使用Bio.Phylo.write()将使用Biopython生成的自举系统发生树写入文件

时间:2015-03-18 15:24:29

标签: tree format biopython statistics-bootstrap phylogeny

我在使用bootstrap值导出BioPython Tree对象(来自Bio.Phylo)时遇到问题。树根据距离矩阵直接在我的BioPython脚本中创建。

树基本上看起来很好,但是当我使用Bio.Phylo.write()函数将它们导出到文件(Newick,NEXUS或phyloXML格式)时,bootstrap-support值似乎以错误的格式导出。

树形拓扑可以很好地显示,例如使用ITOL或Dendroscope,但无法显示引导值。

树对象的示例以及生成的newick和phyloxml文件如下所示。如何使用正确(可读)的引导值导出树?


示例:

这就是BioPython中的树对象(具有5个“物种”的示例树,名为A-F):

Tree(rooted=False)
    Clade(branch_length=0, confidence=100.0, name='Inner3')
        Clade(branch_length=-0.0791666666667, name='A')
        Clade(branch_length=0.0375, confidence=10.0, name='Inner2')
            Clade(branch_length=0.0625, name='C')
            Clade(branch_length=0.104166666667, confidence=40.0, name='Inner1')
                Clade(branch_length=-0.15, name='D')
                Clade(branch_length=0.15, name='B')
        Clade(branch_length=0.0791666666667, name='E')

当我将其导出为newick格式( - > Bio.Phylo.write(mytree,outfile,"newick"))时,文件最终会像这样:

(A:-0.07917,(C:0.06250,(D:-0.15000,B:0.15000)Inner140.00:0.10417)Inner210.00:0.03750,E:0.07917)Inner3100.00:0.00000;

如您所见,置信度值与内部分支标签连接,因此不可读(例如,“Inner140.00”,名称=“Inner1”,置信度= 40.0)。

在phyloXML格式中,树文件如下所示:

<phyloxml xmlns="http://www.phyloxml.org" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.phyloxml.org http://www.phyloxml.org/1.10/phyloxml.xsd">  
<phylogeny rooted="false">
<clade>
  <name>Inner3</name>
  <branch_length>0</branch_length>
  <confidence type="unknown">100.0</confidence>
  <clade>
    <name>A</name>
    <branch_length>-0.0791666666667</branch_length>
  </clade>
  <clade>
    <name>Inner2</name>
    <branch_length>0.0375</branch_length>
    <confidence type="unknown">10.0</confidence>
    <clade>
      <name>C</name>
      <branch_length>0.0625</branch_length>
    </clade>
    <clade>
      <name>Inner1</name>
      <branch_length>0.104166666667</branch_length>
      <confidence type="unknown">40.0</confidence>
      <clade>
        <name>D</name>
        <branch_length>-0.15</branch_length>
      </clade>
      <clade>
        <name>B</name>
        <branch_length>0.15</branch_length>
      </clade>
    </clade>
  </clade>
  <clade>
    <name>E</name>
    <branch_length>0.0791666666667</branch_length>
  </clade>
</clade>

这看起来好多了,但是信心值仍然无法被树形视觉化工具识别,例如ITOL(可能是由于置信类型=“未知”标签?)

我该怎么办?修改最终结果文件似乎有风险(如果我真的想要带有“内部”等关键字的叶标签怎么办?)

另外,我想将自己限制在BioPython模块中,因为添加额外的外部Python模块作为依赖项会使合作伙伴的工具变得复杂。

1 个答案:

答案 0 :(得分:2)

没关系:终于找到了解决方法!

对于有同样问题的人: 您可以迭代命令tree.get_nonterminals()给出的BioPython树对象的所有内部节点,并将内部节点名称设置为None。 由于此tree.get_nonterminals()仅输出内部节点(不是树叶),因此保留名称保持不变。

示例:

for node in example_tree.get_nonterminals():
    node.name = None

这应该在写入Newick Format时修复输出!