Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 生物ython系统发育树的子树_Python_Tree_Bioinformatics_Biopython - Fatal编程技术网

Python 生物ython系统发育树的子树

Python 生物ython系统发育树的子树,python,tree,bioinformatics,biopython,Python,Tree,Bioinformatics,Biopython,我有一个newick格式的系统发育树。我想根据终端节点的标签(因此基于物种列表)拉出一个子树。我正在使用的树的副本可在此处找到: 目前,我在树上读到了使用BioPython的文章,如下所示: from Bio import Phylo #read in Phylogenetic Tree tree = Phylo.read('dm6.27way.nh', 'newick') #list of species of interest species_list = ['dm6', 'droSim1'

我有一个newick格式的系统发育树。我想根据终端节点的标签(因此基于物种列表)拉出一个子树。我正在使用的树的副本可在此处找到:

目前,我在树上读到了使用BioPython的文章,如下所示:

from Bio import Phylo
#read in Phylogenetic Tree
tree = Phylo.read('dm6.27way.nh', 'newick')
#list of species of interest
species_list = ['dm6', 'droSim1', 'droSec1', 'droYak3', 'droEre2', 'droBia2', 'droSuz1', 'droAna3', 'droBip2', 'droEug2', 'droEle2', 'droKik2', 'droTak2', 'droRho2', 'droFic2']

如何仅提取物种列表中物种的子树?

好的,是的,假设您希望最小的树包含物种列表中的所有物种,那么您希望此树的根节点是列表中所有物种的最新共同祖先(MRCA),谢天谢地,这已在Phylo中实现:

from Bio import Phylo

#read in Phylogenetic Tree
tree = Phylo.read('dm6.27way.nh', 'newick')
#list of species of interest
species_list = ['dm6',
                'droSim1',
                'droSec1',
                'droYak3',
                'droEre2',
                'droBia2',
                'droSuz1',
                'droAna3',
                'droBip2',
                'droEug2',
                'droEle2',
                'droKik2',
                'droTak2',
                'droRho2',
                'droFic2']

common_ancestor = tree.common_ancestor(species_list)
Phylo.draw_ascii(common_ancestor)
输出:

Clade
                                           ___ dm6
                                       ___|
                                      |   | , droSim1
                                      |   |_|
                            __________|     | droSec1
                           |          |
                           |          |  _____ droYak3
                          ,|          |_|
                          ||            |____ droEre2
                          ||
                          ||      _______ droBia2
                          ||_____|
                          |      |_____ droSuz1
                          |
                        __|                                  _______ droAna3
                       |  |_________________________________|
                       |  |                                 |________ droBip2
                       |  |
                       |  |___________________ droEug2
                       |
                       |_____________ droEle2
                      ,|
                      ||______________________________ droKik2
                    __||
                   |  ||______________ droTak2
___________________|  |
                   |  |____________ droRho2
                   |
                   |_______________ droFic2

不要使用BioPython,而是使用
ete3

from ete3 import Tree
t = Tree('dm6.27way.nh')
t.prune(species_list, preserve_branch_length=True)
t.write()
根据文件


从版本2.2开始,此功能还包括“保留分支长度”标志,该标志允许从树中删除节点,同时保持其余节点之间的原始距离。

仅澄清一点,您想要最小的树,其中包含物种列表中的所有物种?那么这棵树的根节点应该是最新的共同祖先或者列表中的所有物种?哦,我应该澄清更多。子树将只包含列表中的所有物种。你下面的解决方案正是我想要的。这看起来不错。它是否也重新计算了分支长度?我在文档中都没有明确说明()。也许你可以测试一下,然后再报告?