Bio.Phylo.BaseTree 模块
Bio.Phylo 对象的基本类。
所有用于系统发育树的对象表示都应该派生自这些基本类,以便使用定义在其上的通用方法。
- class Bio.Phylo.BaseTree.TreeElement
基类:
object
所有 Bio.Phylo 类的基类。
- __repr__() str
显示该对象的构造函数及其基本参数。
- __str__() str
返回 str(self)。
- class Bio.Phylo.BaseTree.TreeMixin
基类:
object
用于 Tree 和 Clade 基类的方法。
这使得
Tree
和Clade
支持相同的遍历和搜索操作,而无需 Clade 继承自 Tree,因此 Clade 不需要拥有 Tree 的所有属性,只需root
(一个 Clade 实例)和is_terminal
。- find_any(*args, **kwargs)
返回由 find_elements() 找到的第一个元素,或 None。
这也有助于检查树中是否存在任何匹配的元素,并且可以在条件表达式中使用。
- find_elements(target=None, terminal=None, order='preorder', **kwargs)
查找与给定属性匹配的所有树元素。
任意关键字参数表示子元素的属性名称和要匹配的值:字符串、整数或布尔值。字符串被评估为正则表达式匹配;整数直接比较以检查相等性,布尔值在比较之前评估属性的真值(True 或 False)。要处理非零浮点数,请使用布尔参数搜索,然后手动过滤结果。
如果未给出关键字参数,则仅使用类类型进行匹配。
结果是通过深度优先搜索遍历所有匹配对象的迭代器。(不一定与元素在源文件中的出现顺序相同!)
- 参数:
- targetTreeElement 实例、类型、字典或可调用对象
指定要搜索的特征。(默认值 TreeElement 匹配任何标准 Bio.Phylo 类型。)
- terminalbool
一个布尔值,用于选择或不选择终端节点(也称为叶节点)。True 搜索仅终端节点,False 排除终端节点,默认值 None 搜索终端和非终端节点,以及缺少
is_terminal
方法的任何树元素。- order{‘preorder’, ‘postorder’, ‘level’}
树遍历顺序:‘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_elements() 一样查找每个元素,但返回相应的 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_lengthsbool
如果为 True,则仅计算分支数量(树中的级别)。默认情况下,距离是从根到分支的累积分支长度。
- 返回值:
dict of {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)分别指定的 target,例如 is_monophyletic(t1, t2, t3) - 但不能同时使用这两种方式。为了方便起见,如果终端是单系的,则此方法返回目标的共同祖先(MCRA),否则返回 False。
- 返回值:
如果终端是单系的,则返回共同祖先,否则返回 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
折叠某个分支的父节点会将父节点的分支长度添加到子节点,因此在执行 collapse_all 期间,某个分支的分支长度可能会增加。在此实现中,分支根据其在原始树中的属性进行折叠,而不是树遍历到达该分支时的属性。(更容易调试。)如果您想要其他行为(增量测试),修改此函数的源代码很简单。
- ladderize(reverse=False)
根据终端节点的数量对分支进行排序。
默认情况下,最深的节点最后。使用
reverse=True
对节点进行从深到浅的排序。
- prune(target=None, **kwargs)
从树中修剪终端节点。
如果分类单元来自分叉,则连接的节点将被折叠,其分支长度将添加到剩余的终端节点。这可能不再是一个有意义的值。
- 返回值:
修剪目标的父节点
- split(n=2, branch_length=1.0)
生成 n(默认 2)个新子孙。
在物种树中,这是一个物种形成事件。
新的分支具有给定的分支长度,并且与该分支的根节点具有相同的名称,并带有整数后缀(从 0 开始计数)。例如,将名为“A”的分支拆分会生成名为“A0”和“A1”的子分支。如果分支没有名称,则使用前缀“n”作为子节点名称,例如“n0”和“n1”。
- class Bio.Phylo.BaseTree.Tree(root=None, rooted=True, id=None, name=None)
基类:
TreeElement
,TreeMixin
系统发育树,包含系统发育的全局信息。
结构和节点特定数据可以通过附加到 Tree 实例的“根”分支访问。
- 参数:
- rootClade
树的起始节点。如果树是根节点,这通常是根节点。
- rootedbool
树是否为根节点。默认情况下,假设树是根节点。
- idstr
树的标识符(如果有)。
- namestr
树的名称,本质上是一个标签。
- __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 – 既可以是指定要创建的分类单元数量的整数(自动命名为分类单元#),也可以是分类单元名称的迭代器,以字符串形式表示。
- 返回值:
与该类类型相同的树。
- property clade
返回此树中的第一个分支(不是它本身)。
- as_phyloxml(**kwargs)
将此树转换为与 PhyloXML 兼容的系统发育。
这使您可以使用 PhyloXML 定义的附加注释类型,并在将此树写入“phyloxml”时保存这些信息。
- root_with_outgroup(outgroup_targets, *more_targets, outgroup_branch_length=None)
用包含 outgroup_targets 的外群分支重新根植此树。
就地操作。
- 边缘情况
如果
outgroup == self.root
,则不进行更改如果外群是终端节点,则创建一个新的二叉根节点,该节点具有一个到外群的 0 长度分支
如果外群是内部节点,则使用给定的外群节点作为新的三叉根节点,保持分支不变
如果原始根节点是二叉节点,则将其从树中删除,保持总分支长度不变
- 参数:
outgroup_branch_length –
重新根植后通往外群的分支的长度。如果未指定(None),则
如果外群是内部节点(不是单个终端分类单元),则使用该节点作为新的根节点。
否则,创建一个新的根节点作为外群的父节点。
- root_at_midpoint()
在两个最远分类单元的中点处根植树。
这会就地操作,留下一个二叉根节点。树的拓扑结构保持不变,但不对分支/节点/分类单元排序的稳定性做出任何保证。
- is_terminal()
检查此树的根节点是否为终端节点。
- __format__(format_spec)
将树序列化为指定文件格式的字符串。
此方法支持 Python 的
format
内置函数。- 参数:
format_spec –
Bio.Phylo.write
支持的作为输出文件格式的小写字符串。
- format(fmt=None)
将树序列化为指定文件格式的字符串。
- 参数:
fmt – 由
Bio.Phylo.write
支持的输出文件格式的字符串。
- __str__() str
返回整个树的字符串表示。
使用
repr
递归地序列化每个子分支,以创建对象结构的摘要。
- class Bio.Phylo.BaseTree.Clade(branch_length=None, name=None, clades=None, confidence=None, color=None, width=None)
基类:
TreeElement
,TreeMixin
递归定义的子树。
- 参数:
- branch_lengthstr
通向此分支根节点的分支的长度。
- namestr
该分支的名称(标签)。
- cladeslist
直接在此树根节点下方的子树。
- confidencenumber
支持度。
- colorBranchColor
分支及其后代的显示颜色。
- widthnumber
分支及其后代的显示宽度。
- __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__()
的结果不为零,则该对象被认为为 True。我们希望 Clade 实例始终被认为是 True。
- __str__() 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’ 表示 (255, 128, 0) 的 RGB 值。
- 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__() str
在表示此对象时保留标准 RGB 顺序。
- __str__() str
显示颜色的 RGB 值。