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() 尋找每個元素,但傳回對應的演化支物件。(這通常是您想要的。)
- 傳回:
一個可迭代物件,通過所有相符的物件,預設會深度優先 (前序) 搜尋。
- 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)
-
一棵系統發生樹,包含系統發生的全域資訊。
結構和節點特定資料可透過附加至 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)
-
遞迴定義的子樹。
- 參數:
- 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 值。