Bio.Phylo.BaseTree模块¶
Bio.Phylo对象的基类。
系统发育树的所有对象表示都应该从这些基类派生,以便使用在它们上定义的公共方法。
- class Bio.Phylo.BaseTree.TreeElement¶
基类:
object
所有Bio.Phylo类的基类。
- __repr__()¶
显示此对象的构造函数及其原始参数。
- __str__()¶
显示此对象的构造函数及其原始参数。
- class Bio.Phylo.BaseTree.TreeMixin¶
基类:
object
基于树和基于Clade的类的方法。
这让我们
Tree
和Clade
支持相同的遍历和搜索操作,而不需要Clade继承Tree,因此Clade不需要拥有Tree的所有属性--只需root
(Clade实例)和is_terminal
。- find_any(*args, **kwargs)¶
返回find_element()找到的第一个元素,或NONE。
这对于检查树中是否存在任何匹配元素也很有用,并且可以在条件表达式中使用。
- find_elements(target=None, terminal=None, order='preorder', **kwargs)¶
查找与给定属性匹配的所有树元素。
任意关键字参数指示子元素的属性名称和要匹配的值:字符串、整数或布尔值。字符串作为正则表达式匹配进行评估;整数直接比较是否相等,布尔值在比较之前评估属性的真值(True或False)。要处理非零浮点数,请使用布尔参数进行搜索,然后手动过滤结果。
如果没有给出关键字参数,则只使用类类型进行匹配。
通过深度优先搜索,结果是可迭代遍历所有匹配对象。(不必与元素在源文件中出现的顺序相同!)
- 参数:
- 目标TreeElement实例、类型、Dict或Callable
指定要搜索的特征。(默认的TreeElement与任何标准Bio.Phylo类型匹配。)
- 终端布尔尔
为终端节点选择或针对终端节点选择的布尔值(也称为叶节点)。TRUE仅搜索终端节点,FALSE排除终端节点,默认值NONE同时搜索终端节点和非终端节点,以及缺少
is_terminal
方法。- 订单{‘预购’,‘邮购’,‘级别’}
树遍历顺序:‘preorder’(默认值)是深度优先搜索,‘postorder’是子节点在父节点之前的DFS,‘level’是广度优先搜索。
示例
>>> from Bio import Phylo >>> phx = Phylo.PhyloXMLIO.read('PhyloXML/phyloxml_examples.xml') >>> matches = phx.phylogenies[5].find_elements(code='OCTVU') >>> next(matches) Taxonomy(code='OCTVU', scientific_name='Octopus vulgaris')
- find_clades(target=None, terminal=None, order='preorder', **kwargs)¶
找到包含匹配元素的每个分支。
也就是说,像find_element()一样查找每个元素,但返回相应的clade对象。(这通常是您想要的。)
- 返回:
迭代遍历所有匹配的对象,默认情况下搜索深度优先(预排序)。
- get_path(target=None, **kwargs)¶
直接列出此根目录和给定目标之间的分支。
- 返回:
沿此路径的所有分支对象的列表,以给定目标结束,但不包括根分支。
- get_nonterminals(order='preorder')¶
获取此树的所有非终端(内部)节点的列表。
- get_terminals(order='preorder')¶
获取此树的所有终端(叶)节点的列表。
- trace(start, finish)¶
此树中两个目标之间的所有分支对象的列表。
不包括
start
,包括finish
。
- common_ancestor(targets, *more_targets)¶
所有给定目标的最近共同祖先(分支)。
- 边缘情况:
如果未指定目标,则返回self.root
如果给定1个目标,则返回目标
如果在此树中找不到任何目标,则引发ValueError
- count_terminals()¶
统计此树中的终端(叶)节点数。
- depths(unit_branch_lengths=False)¶
创建树枝到深度的映射(按树枝长度)。
- 参数:
- unit_branch_lengths布尔尔
如果为True,则仅计算分支数(树中的级别)。默认情况下,距离是通向树枝的累积分支长度。
- 返回:
dict为{clade:Depth},其中关键帧是树中的所有Clade实例,值是从根到每个分支(包括终端)的距离。
- distance(target1, target2=None)¶
计算两个目标之间的分支长度之和。
如果只指定了一个目标,则另一个是此树的根。
- is_bifurcating()¶
如果节点下游的树是严格分叉的,则返回True。
即,所有节点都有2个或0个子节点(分别为内部或外部)。根可能有3个后代,但仍然被认为是分叉树的一部分,因为它没有祖先。
- is_monophyletic(terminals, *more_terminals)¶
如果终端由一个完整的子类组成,则为MRCA,否则为FALSE。
即,存在一个分支,使得其终端与给定目标的集合相同。
给定的目标必须是树的终端。
要使两者都匹配,请执行以下操作
Bio.Nexus.Trees
以及Bio.Phylo中的其他多目标方法,此方法的参数可以通过两种方式之一指定:(I)作为单个目标列表,或(Ii)单独指定的目标,例如IS_Monphyletic(T1,T2,T3)--但不能同时指定两者。为方便起见,如果目标是单系的(而不是值True),则此方法返回目标的公共祖先(MCRA),否则返回False。
- 返回:
如果顶生为单系,则为共同祖先,否则为假。
- is_parent_of(target=None, **kwargs)¶
检查目标是否为此树的后代。
不需要是直系后裔。
要仅检查某个分支的直系后代,只需使用列表成员资格测试即可:
if subclade in clade: ...
- is_preterminal()¶
检查是否所有直系后代都是终端。
- total_branch_length()¶
计算这棵树中所有分支长度的总和。
- collapse(target=None, **kwargs)¶
从树中删除目标,将其子级重新链接到父级。
- 返回:
父级分支。
- collapse_all(target=None, **kwargs)¶
折叠此树的所有后代,只留下终端。
总的分支长度被保留,即到每个终端的距离保持不变。
例如,这将安全地折叠引导支持较差的节点:
>>> from Bio import Phylo >>> tree = Phylo.read('PhyloXML/apaf.xml', 'phyloxml') >>> print("Total branch length %0.2f" % tree.total_branch_length()) Total branch length 20.44 >>> tree.collapse_all(lambda c: c.confidence is not None and c.confidence < 70) >>> print("Total branch length %0.2f" % tree.total_branch_length()) Total branch length 21.37
通过使用级别顺序遍历并预先测试所有分支属性(相对于目标规范),此实现避免了奇怪的副作用。具体地说,如果分支满足原始树中的目标规范,它将被折叠。例如,如果条件是:
>>> from Bio import Phylo >>> tree = Phylo.read('PhyloXML/apaf.xml', 'phyloxml') >>> print("Total branch length %0.2f" % tree.total_branch_length()) Total branch length 20.44 >>> tree.collapse_all(lambda c: c.branch_length < 0.1) >>> print("Total branch length %0.2f" % tree.total_branch_length()) Total branch length 21.13
塌陷分支的父节点会将父节点的分支长度添加到子节点,因此在执行CLASSY_ALL期间,分支的BRANCH_LENGTH可能会增加。在此实现中,分支根据其在原始树中的属性折叠,而不是根据树遍历到达分支时的属性折叠。(它更容易调试。)如果您想要另一种行为(增量测试),修改此函数的源代码非常简单。
- ladderize(reverse=False)¶
根据终端节点的数量就地排序分支。
默认情况下,最深的分支是最后一个。使用
reverse=True
将分支从深到浅进行排序。
- prune(target=None, **kwargs)¶
从树上修剪末端分支。
如果分类单元来自一个分叉,则连接节点将被折叠,其分支长度将增加到剩余的末端节点。这可能不再是一个有意义的值。
- 返回:
已修剪目标的父分支
- split(n=2, branch_length=1.0)¶
生成n个(默认值为2)新子体。
在物种树中,这是一个物种形成事件。
新的分支具有给定的BRANCH_LENGTH,并且与该分支的根具有相同的名称加上一个整数后缀(从0开始计数)。例如,拆分名为“A”的分支将生成名为“A0”和“A1”的子分支。如果分支没有名称,则前缀“n”用于子节点,例如“n0”和“n1”。
- class Bio.Phylo.BaseTree.Tree(root=None, rooted=True, id=None, name=None)¶
基类:
TreeElement
,TreeMixin
包含系统发育全局信息的系统发育树。
结构和特定于节点的数据可通过附加到树实例的“根”分支访问。
- 参数:
- 根部分支
树的起始节点。如果树是根的,则这通常是根节点。
- 扎根布尔尔
无论树是否扎根。默认情况下,假定树是有根的。
- ID号应力
树的标识符(如果有)。
- 名字应力
树的名称,本质上是一个标签。
- __init__(root=None, rooted=True, id=None, name=None)¶
初始化系统发育树的参数。
- classmethod from_clade(clade, **kwargs)¶
给出一个树枝,创建一个新的Tree对象。
关键字参数是常见的
Tree
构造函数参数。
- classmethod randomized(taxa, branch_length=1.0, branch_stdev=None)¶
在给定分类群列表的情况下,创建一棵随机分叉树。
- 参数:
taxa -- 指定要创建的分类单元数量的整数(自动命名为Taxon#)或可迭代的分类单元名称,作为字符串。
- 返回:
与此类类型相同的树。
- property clade¶
返回此树中的第一个分支(而不是其本身)。
- as_phyloxml(**kwargs)¶
将此树转换为与PhyloXML兼容的系统发育树。
这允许您使用PhyloXML定义的附加注释类型,并在编写此树时将此信息保存为“phyloxml”。
- root_with_outgroup(outgroup_targets, *more_targets, outgroup_branch_length=None)¶
使用包含OUTGROUP_TARGET的OUTGROUP分支重新启动此树。
就地操作。
- 边缘情况:
如果
outgroup == self.root
,不变如果OUTGROUP是终端,则创建到OUTGROUP的具有0长度分支的新分支根节点
如果outgroup是内部的,则使用给定的outgroup节点作为新的三叉根,保持分支不变
如果原始根是分叉的,则将其从树中删除,并保留总的分支长度
- 参数:
outgroup_branch_length -- 重排后通向外组的分支的长度。如果未指定(无),则:-如果外群是内部节点(不是单个末端分类单元),则使用该节点作为新的根。-否则,创建一个新的根节点作为outgroup的父节点。
- root_at_midpoint()¶
这棵树在最远的两个分类群的中点生根。
这在原地运行,留下了一个分叉的根。树的拓扑在其他方面被保留,尽管不能保证分支/节点/分类单元排序的稳定性。
- is_terminal()¶
检查此树的根是否为终端。
- __format__(format_spec)¶
将树序列化为指定文件格式的字符串。
此方法支持Python的
format
内置功能。- 参数:
format_spec -- 支持的小写字符串
Bio.Phylo.write
作为输出文件格式。
- format(fmt=None, format=None)¶
将树序列化为指定文件格式的字符串。
- 参数:
fmt -- 支持的小写字符串
Bio.Phylo.write
作为输出文件格式。
- __str__()¶
返回整个树的字符串表示形式。
使用以下命令递归序列化每个子分支
repr
若要创建对象结构的摘要,请执行以下操作。
- class Bio.Phylo.BaseTree.Clade(branch_length=None, name=None, clades=None, confidence=None, color=None, width=None)¶
基类:
TreeElement
,TreeMixin
递归定义的子树。
- 参数:
- branch_length应力
通向此分支的根节点的分支的长度。
- 名字应力
分支的名称(标签)。
- 分支列表
直接在这棵树的根下扎根的子树。
- 信心数
支持。
- 颜色BranchColor
分支和子分支的显示颜色。
- 宽度数
分支和派生项的显示宽度。
- __init__(branch_length=None, name=None, clades=None, confidence=None, color=None, width=None)¶
定义分支树的参数。
- property root¶
允许TreeMixin方法正确遍历分支。
- is_terminal()¶
检查这是否是终端(叶)节点。
- __getitem__(index)¶
按索引(整数或切片)获取分支。
- __iter__()¶
遍历此树的直接后代分支(子树)。
- __len__()¶
直接返回根下的分支数量。
- __bool__()¶
此类实例的布尔值(True)。
注:如果未定义此方法,但
__len__
的结果为真,则该对象被认为是真的。__len__()
不是零。我们希望Clade实例始终被视为True。
- __str__()¶
返回类实例的名称。
- property color¶
分支颜色。
- class Bio.Phylo.BaseTree.BranchColor(red, green, blue)¶
基类:
object
指示以图形方式渲染时分支的颜色。
客户端代码(例如,可视化程序)应将该颜色解释为应用于整个分支,除非被子分支的颜色覆盖。
颜色值必须是0到255之间的整数。
- color_names = {'aqua': (0, 255, 255), 'b': (0, 0, 255), 'black': (0, 0, 0), 'blue': (0, 0, 255), 'brown': (165, 42, 42), 'c': (0, 255, 255), 'cyan': (0, 255, 255), 'fuchsia': (255, 0, 255), 'g': (0, 128, 0), 'gold': (255, 215, 0), 'gray': (128, 128, 128), 'green': (0, 128, 0), 'grey': (128, 128, 128), 'k': (0, 0, 0), 'lime': (0, 255, 0), 'm': (255, 0, 255), 'magenta': (255, 0, 255), 'maroon': (128, 0, 0), 'navy': (0, 0, 128), 'olive': (128, 128, 0), 'orange': (255, 165, 0), 'pink': (255, 192, 203), 'purple': (128, 0, 128), 'r': (255, 0, 0), 'red': (255, 0, 0), 'salmon': (250, 128, 114), 'silver': (192, 192, 192), 'tan': (210, 180, 140), 'teal': (0, 128, 128), 'w': (255, 255, 255), 'white': (255, 255, 255), 'y': (255, 255, 0), 'yellow': (255, 255, 0)}¶
- __init__(red, green, blue)¶
初始化树的BranchColor。
- classmethod from_hex(hexstr)¶
从十六进制字符串构造BranchColor对象。
字符串格式与HTML和CSS中使用的样式相同,例如‘#FF8000’表示RGB值(255,128,0)。
- classmethod from_name(colorname)¶
根据颜色的名称构造一个BranchColor对象。
- to_hex()¶
返回此颜色的24位十六进制RGB表示形式。
返回的字符串适合在HTML/CSS中使用,在matplotlib中作为颜色参数使用,也可能在其他情况下使用。
示例
>>> bc = BranchColor(12, 200, 100) >>> bc.to_hex() '#0cc864'
- to_rgb()¶
返回表示此颜色的RGB值元组(0到255)。
示例
>>> bc = BranchColor(255, 165, 0) >>> bc.to_rgb() (255, 165, 0)
- __repr__()¶
表示此对象时保留标准RGB顺序。
- __str__()¶
显示颜色的RGB值。