scipy.cluster.hierarchy.

dendrogram#

scipy.cluster.hierarchy.dendrogram(Z, p=30, truncate_mode=None, color_threshold=None, get_leaves=True, orientation='top', labels=None, count_sort=False, distance_sort=False, show_leaf_counts=True, no_plot=False, no_labels=False, leaf_font_size=None, leaf_rotation=None, leaf_label_func=None, show_contracted=False, link_color_func=None, ax=None, above_threshold_color='C0')[source]#

將階層式分群繪製成樹狀圖。

樹狀圖說明每個群集如何組成,方法是在非單一群集及其子群集之間繪製 U 形連結。U 形連結的頂部表示群集合併。U 形連結的兩條腿表示合併了哪些群集。U 形連結兩條腿的長度表示子群集之間的距離。它也是兩個子群集中原始觀測值之間的共生距離。

參數:
Zndarray

連結矩陣,編碼要呈現為樹狀圖的階層式分群。有關 Z 格式的更多資訊,請參閱 linkage 函數。

pint, optional

truncate_modep 參數。

truncate_modestr, optional

當從中導出連結的原始觀測矩陣很大時,樹狀圖可能難以閱讀。截斷用於濃縮樹狀圖。有幾種模式

None

不執行截斷(預設)。注意:'none'None 的別名,為了向後相容性而保留。

'lastp'

連結中最後 p 個非單一群集是連結中唯一的非葉節點;它們對應於 Z 中的列 Z[n-p-2:end]。所有其他非單一群集都縮減為葉節點。

'level'

樹狀圖樹狀結構顯示的層級不超過 p 層。「層級」包括從最終合併開始的 p 次合併的所有節點。

注意:'mtica''level' 的別名,為了向後相容性而保留。

color_thresholddouble, optional

為了簡潔起見,令 \(t\)color_threshold。如果 \(k\) 是低於切割閾值 \(t\) 的第一個節點,則將群集節點 \(k\) 下方的所有後代連結都著上相同的顏色。所有連接距離大於或等於閾值的節點的連結都使用預設 matplotlib 顏色 'C0' 著色。如果 \(t\) 小於或等於零,則所有節點都著色為 'C0'。如果 color_threshold 為 None 或 ‘default’,對應於 MATLAB(TM) 行為,則閾值設定為 0.7*max(Z[:,2])

get_leavesbool, optional

在結果字典中包含列表 R['leaves']=H。對於每個 \(i\)H[i] == j,群集節點 j 出現在葉的從左到右遍歷中的位置 i,其中 \(j < 2n-1\)\(i < n\)

orientationstr, optional

繪製樹狀圖的方向,可以是以下任何字串

'top'

將根繪製在頂部,並繪製向下延伸的連結。(預設)。

'bottom'

將根繪製在底部,並繪製向上延伸的連結。

'left'

將根繪製在左側,並繪製向右延伸的連結。

'right'

將根繪製在右側,並繪製向左延伸的連結。

labelsndarray, optional

預設情況下,labels 為 None,因此原始觀測值的索引用於標記葉節點。否則,這是一個大小為 \(n\) 的序列,其中 n == Z.shape[0] + 1。僅當 labels[i] 值對應於原始觀測值而不是非單一群集時,它才是放置在第 \(i\) 個葉節點下方的文字。

count_sortstr or bool, optional

對於每個節點 n,視覺上從左到右繪製 n 的兩個後代連結的順序由此參數確定,它可以是以下任何值

False

不執行任何操作。

'ascending'True

首先繪製群集中原始物件數量最少的子物件。

'descending'

首先繪製群集中原始物件數量最多的子物件。

注意,distance_sortcount_sort 不能同時為 True。

distance_sortstr or bool, optional

對於每個節點 n,視覺上從左到右繪製 n 的兩個後代連結的順序由此參數確定,它可以是以下任何值

False

不執行任何操作。

'ascending'True

首先繪製其直接後代之間距離最小的子物件。

'descending'

首先繪製其直接後代之間距離最大的子物件。

注意 distance_sortcount_sort 不能同時為 True。

show_leaf_countsbool, optional

當為 True 時,代表 \(k>1\) 個原始觀測值的葉節點會標記括號中包含的觀測值數量。

no_plotbool, optional

當為 True 時,不執行最終渲染。如果只需要為渲染計算的資料結構,或者 matplotlib 不可用,這會很有用。

no_labelsbool, optional

當為 True 時,在樹狀圖的渲染中,葉節點旁邊不會出現標籤。

leaf_rotationdouble, optional

指定旋轉葉標籤的角度(以度為單位)。未指定時,旋轉基於樹狀圖中的節點數量(預設為 0)。

leaf_font_sizeint, optional

指定葉標籤的字型大小(以點為單位)。未指定時,大小基於樹狀圖中的節點數量。

leaf_label_funclambda or function, optional

leaf_label_func 是可呼叫函數時,對於每個具有群集索引 \(k < 2n-1\) 的葉。預期函數會傳回帶有葉標籤的字串。

索引 \(k < n\) 對應於原始觀測值,而索引 \(k \geq n\) 對應於非單一群集。

例如,若要使用其節點 ID 標記單例,並使用其 ID、計數和不一致係數標記非單例,只需執行以下操作

# First define the leaf label function.
def llf(id):
    if id < n:
        return str(id)
    else:
        return '[%d %d %1.2f]' % (id, count, R[n-id,3])

# The text for the leaf nodes is going to be big so force
# a rotation of 90 degrees.
dendrogram(Z, leaf_label_func=llf, leaf_rotation=90)

# leaf_label_func can also be used together with ``truncate_mode``,
# in which case you will get your leaves labeled after truncation:
dendrogram(Z, leaf_label_func=llf, leaf_rotation=90,
           truncate_mode='level', p=2)
show_contractedbool, optional

當為 True 時,縮減為葉節點的非單一節點的高度會繪製為沿著連接該葉節點的連結的十字。這僅在使用截斷時才真正有用(請參閱 truncate_mode 參數)。

link_color_funccallable, optional

如果給定,則使用每個非單一 ID 呼叫 link_color_function,該 ID 對應於它將繪製的每個 U 形連結。預期函數會傳回要繪製連結的顏色,編碼為 matplotlib 顏色字串代碼。例如

dendrogram(Z, link_color_func=lambda k: colors[k])

使用 colors[k] 為每個未截斷的非單一節點 k 下方的直接連結著色。

axmatplotlib Axes 實例, optional

如果為 None 且 no_plot 不為 True,則樹狀圖將繪製在目前的軸上。否則,如果 no_plot 不為 True,則樹狀圖將繪製在給定的 Axes 實例上。如果樹狀圖是更複雜圖形的一部分,這會很有用。

above_threshold_colorstr, optional

此 matplotlib 顏色字串設定高於 color_threshold 的連結顏色。預設值為 'C0'

傳回:
Rdict

用於呈現樹狀圖的資料結構字典。它具有以下鍵

'color_list'

顏色名稱列表。第 k 個元素代表第 k 個連結的顏色。

'icoord''dcoord'

它們每個都是列表的列表。令 icoord = [I1, I2, ..., Ip],其中 Ik = [xk1, xk2, xk3, xk4],且 dcoord = [D1, D2, ..., Dp],其中 Dk = [yk1, yk2, yk3, yk4],則繪製的第 k 個連結是 (xk1, yk1) - (xk2, yk2) - (xk3, yk3) - (xk4, yk4)

'ivl'

對應於葉節點的標籤列表。

'leaves'

對於每個 i,H[i] == j,群集節點 j 出現在葉的從左到右遍歷中的位置 i,其中 \(j < 2n-1\)\(i < n\)。如果 j 小於 n,則第 i 個葉節點對應於原始觀測值。否則,它對應於非單一群集。

'leaves_color_list'

顏色名稱列表。第 k 個元素代表第 k 個葉的顏色。

註解

預期 Z[:,2] 中的距離是單調的,否則樹狀圖中會出現交叉。

範例

>>> import numpy as np
>>> from scipy.cluster import hierarchy
>>> import matplotlib.pyplot as plt

一個非常基本的範例

>>> ytdist = np.array([662., 877., 255., 412., 996., 295., 468., 268.,
...                    400., 754., 564., 138., 219., 869., 669.])
>>> Z = hierarchy.linkage(ytdist, 'single')
>>> plt.figure()
>>> dn = hierarchy.dendrogram(Z)

現在,在給定的軸中繪圖,改進配色方案,並同時使用垂直和水平方向

>>> hierarchy.set_link_color_palette(['m', 'c', 'y', 'k'])
>>> fig, axes = plt.subplots(1, 2, figsize=(8, 3))
>>> dn1 = hierarchy.dendrogram(Z, ax=axes[0], above_threshold_color='y',
...                            orientation='top')
>>> dn2 = hierarchy.dendrogram(Z, ax=axes[1],
...                            above_threshold_color='#bcbddc',
...                            orientation='right')
>>> hierarchy.set_link_color_palette(None)  # reset to default after use
>>> plt.show()
../../_images/scipy-cluster-hierarchy-dendrogram-1_00.png
../../_images/scipy-cluster-hierarchy-dendrogram-1_01.png