當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Python SciPy hierarchy.dendrogram用法及代碼示例

本文簡要介紹 python 語言中 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')#

將層次聚類繪製為樹狀圖。

樹狀圖通過在非單例集群及其子集群之間繪製U-shaped 鏈接來說明每個集群是如何組成的。 U-link 的頂部表示集群合並。 U-link 的兩條腿指示合並了哪些集群。 U-link的兩條腿的長度代表子簇之間的距離。它也是兩個子集群中原始觀測值之間的共生距離。

參數

Z ndarray

將層次聚類編碼為樹狀圖的鏈接矩陣。有關 Z 格式的更多信息,請參見 linkage 函數。

p 整數,可選

truncate_modep 參數。

truncate_mode str,可選

當導出鏈接的原始觀察矩陣很大時,樹狀圖可能難以閱讀。截斷用於壓縮樹狀圖。有幾種模式:

None

不執行截斷(默認)。注意:'none'None 的別名,保留它是為了向後兼容。

'lastp'

鏈接中最後形成的p非單子簇是鏈接中唯一的非葉子節點;它們對應於 Z 中的 Z[n-p-2:end] 行。所有其他非單例集群都收縮為葉節點。

'level'

不會顯示超過 p 級別的樹狀圖樹。 “level” 包括從最終合並中合並 p 的所有節點。

注意:'mtica''level' 的別名,保留它是為了向後兼容。

color_threshold 雙,可選

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

get_leaves 布爾型,可選

在結果字典中包含一個列表 R['leaves']=H。對於每個 H[i] == j ,集群節點 j 出現在葉子從左到右遍曆的位置 i 中,其中

orientation str,可選

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

'top'

在頂部繪製根,並向下繪製後代鏈接。 (默認)。

'bottom'

在底部繪製根,並向上繪製後代鏈接。

'left'

在左側繪製根,並向右繪製後代鏈接。

'right'

在右側繪製根,並在左側繪製後代鏈接。

labels ndarray,可選

默認情況下,labels 為 None 因此原始觀察的索引用於標記葉節點。否則,這是一個 大小的序列,帶有 n == Z.shape[0] + 1labels[i] 值是放置在第 th 葉節點下的文本,前提是它對應於原始觀察而不是非單例集群。

count_sort str 或 bool,可選

對於每個節點 n,繪製 n 的兩個後代鏈接的順序(視覺上,從左到右)由該參數確定,該參數可以是以下任何值:

False

什麽都沒做。

'ascending'True

首先繪製其集群中原始對象數量最少的孩子。

'descending'

首先繪製在其集群中具有最大數量的原始對象的孩子。

請注意,distance_sortcount_sort 不能同時為 True。

distance_sort str 或 bool,可選

對於每個節點 n,繪製 n 的兩個後代鏈接的順序(視覺上,從左到右)由該參數確定,該參數可以是以下任何值:

False

什麽都沒做。

'ascending'True

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

'descending'

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

注意 distance_sortcount_sort 不能同時為 True。

show_leaf_counts 布爾型,可選

當為 True 時,表示 原始觀測值的葉節點用括號中包含的觀測值數量進行標記。

no_plot 布爾型,可選

如果為 True,則不執行最終渲染。如果隻需要為渲染計算的數據結構或 matplotlib 不可用,這很有用。

no_labels 布爾型,可選

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

leaf_rotation 雙,可選

指定旋轉葉子標簽的角度(以度為單位)。未指定時,旋轉基於樹狀圖中的節點數(默認為 0)。

leaf_font_size 整數,可選

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

leaf_label_func lambda 或函數,可選

leaf_label_func 是可調用函數時,對於每個具有集群索引 的葉子。該函數應返回帶有葉子標簽的字符串。

索引 對應於原始觀測值,而索引 對應於非單例集群。

例如,用節點 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`` parameter,
# 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_contracted 布爾型,可選

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

link_color_func 可調用的,可選的

如果給定,則調用 link_color_function,每個非單例 id 對應於它將繪製的每個 U-shaped 鏈接。該函數應返回繪製鏈接的顏色,編碼為 matplotlib 顏色字符串代碼。例如:

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

使用 colors[k] 為每個未截斷的非單例節點 k 下的直接鏈接著色。

ax matplotlib 軸實例,可選

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

above_threshold_color str,可選

這個 matplotlib 顏色字符串設置 color_threshold 上方鏈接的顏色。默認值為 'C0'

返回

R dict

為呈現樹狀圖而計算的數據結構字典。它有以下鍵:

'color_list'

顏色名稱列表。第 k 個元素表示第 k 個鏈接的顏色。

'icoord''dcoord'

它們中的每一個都是列表的列表。讓 icoord = [I1, I2, ..., Ip] where Ik = [xk1, xk2, xk3, xk4]dcoord = [D1, D2, ..., Dp] where Dk = [yk1, yk2, yk3, yk4] ,那麽繪製的第 k 個鏈接是 (xk1, yk1) - (xk2, yk2) - (xk3, yk3) - (xk4, yk4)

'ivl'

與葉節點對應的標簽列表。

'leaves'

對於每個 i, H[i] == j ,集群節點 j 出現在葉子從左到右遍曆的位置 i 中,其中 。如果 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()
scipy-cluster-hierarchy-dendrogram-1_00.png
scipy-cluster-hierarchy-dendrogram-1_01.png

相關用法


注:本文由純淨天空篩選整理自scipy.org大神的英文原創作品 scipy.cluster.hierarchy.dendrogram。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。