当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。