【问题标题】:Writing bootstrapped phylogenetic trees generated with Biopython to a file using Bio.Phylo.write()使用 Bio.Phylo.write() 将使用 Biopython 生成的自举系统发育树写入文件
【发布时间】:2015-03-18 15:24:28
【问题描述】:

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

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

树形拓扑可以很好地显示,例如使用 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”代表 name="Inner1" 和 confidence=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 等树可视化工具仍然无法识别置信度值(可能是由于置信度类型=“未知”标签?)

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

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

【问题讨论】:

  • 您的 PhyoXML 不完整(缺少 XML 标记以及关闭系统发育和 phyloxml 标记),但是一旦添加它们,我就可以重现 Newick 输出: $ python -c "from Bio import Phylo; Phylo.convert( 'internal_names.xml'、'phyloxml'、'/dev/stdout'、'newick')"
  • 这看起来像是 Newick writer 中的一个错误。我已经在这里报告了:github.com/biopython/biopython/issues/488

标签: tree format biopython statistics-bootstrap phylogeny


【解决方案1】:

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

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

例子:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多