Bio.Phylo.BaseTree模块

Bio.Phylo对象的基类。

系统发育树的所有对象表示都应该从这些基类派生,以便使用在它们上定义的公共方法。

class Bio.Phylo.BaseTree.TreeElement

基类:object

所有Bio.Phylo类的基类。

__repr__()

显示此对象的构造函数及其原始参数。

__str__()

显示此对象的构造函数及其原始参数。

class Bio.Phylo.BaseTree.TreeMixin

基类:object

基于树和基于Clade的类的方法。

这让我们 TreeClade 支持相同的遍历和搜索操作,而不需要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值。