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() 尋找每個元素,但傳回對應的演化支物件。(這通常是您想要的。)

傳回:

一個可迭代物件,通過所有相符的物件,預設會深度優先 (前序) 搜尋。

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,則只計算分支數量 (樹狀結構中的層級)。預設情況下,距離是導向演化支的累積分支長度。

傳回:

一個 {演化支: 深度} 的字典,其中鍵是樹狀結構中的所有 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_monophyletic(t1, t2, t3) – 但不能同時使用兩種方式。

為了方便起見,如果目標節點是單系的(而不是值 True),此方法會回傳目標節點的共同祖先 (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 的過程中,演化支的 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)

基礎:TreeElementTreeMixin

一棵系統發生樹,包含系統發生的全域資訊。

結構和節點特定資料可透過附加至 Tree 實例的「根」演化支存取。

參數:
root演化支

樹的起始節點。如果樹是有根的,這通常會是根節點。

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 – 要建立的分類單元數量的整數(自動命名為 taxon#),或是分類單元名稱的可迭代物件(字串形式)。

傳回:

與此類別相同類型的樹。

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)

基礎:TreeElementTreeMixin

遞迴定義的子樹。

參數:
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 中使用的樣式相同,例如,RGB 值為 (255, 128, 0) 的 ‘#FF8000’。

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 值。