1

Bio.Phylo我在导出带有引导值的 BioPython 树对象(来自 )时遇到问题。这些树是基于距离矩阵在我的 BioPython 脚本中直接创建的。

这些树基本上看起来不错,但是当我使用该Bio.Phylo.write()函数将它们导出到文件(Newick、NEXUS 或 phyloXML 格式)时,引导支持值似乎以错误的格式导出。

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

树对象的示例以及生成的 newick 和 phyloxml 文件如下所示。我可以做些什么来导出具有正确(可读)引导值的树?


例子:

这就是 BioPython 中树对象的样子(示例树有 5 个名为 AF 的“物种”):

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;

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

在 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)仍然无法识别置信度值(可能是由于置信度类型 =“未知”标签?)

我能做些什么?修改最终结果文件似乎有风险(如果我真的想要带有“inner”等关键字的叶子标签怎么办?)

另外,我想限制自己使用 BioPython 模块,因为添加额外的外部 Python 模块作为依赖项会使合作伙伴的工具难以实施。

4

1 回答 1

2

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

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

例子:

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

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

于 2015-03-19T15:56:02.293 回答