我在使用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模块作为依赖项会使合作伙伴的工具变得复杂。
答案 0 :(得分:2)
没关系:终于找到了解决方法!
对于有同样问题的人:
您可以迭代命令tree.get_nonterminals()
给出的BioPython树对象的所有内部节点,并将内部节点名称设置为None
。
由于此tree.get_nonterminals()
仅输出内部节点(不是树叶),因此保留名称保持不变。
示例:
for node in example_tree.get_nonterminals():
node.name = None
这应该在写入Newick Format时修复输出!