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 基类的方法。

这使得 TreeClade 支持相同的遍历和搜索操作,而无需 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_specBio.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 值。