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形链接来组成的。U形链接的顶部表示群集合并。U形链接的两条腿指示合并了哪些簇。U形链接的两条腿的长度表示子簇之间的距离。它也是两个子簇中原始观测之间的同质距离。
- 参数
- Zndarray
对分层聚类进行编码以呈现为树状图的链接矩阵。请参阅
linkage
函数获取有关格式的详细信息Z
。- p整型,可选
这个
p
的参数truncate_mode
。- truncate_mode字符串,可选
当从中导出链接的原始观测矩阵很大时,树状图可能很难读取。采用截断的方法对树状图进行压缩。有几种模式:
None
不执行截断(默认)。注:
'none'
是的别名None
保留它是为了向后兼容。'lastp'
最后一个
p
链接中形成的非单例聚类是链接中唯一的非叶节点;它们对应于行Z[n-p-2:end]
在……里面Z
。所有其他非单例群集都收缩到叶节点中。'level'
不超过
p
将显示树状图树的级别。一个“级别”包括所有具有p
从最终合并中合并。注:
'mtica'
是的别名'level'
保留它是为了向后兼容。
- color_threshold双倍,可选
为简洁起见,让我们 \(t\) 做一个
color_threshold
。对群集节点下方的所有后代链接进行着色 \(k\) 如果是相同的颜色 \(k\) 是低于切割阈值的第一个节点 \(t\) 。连接距离大于或等于阈值的结点的所有链接都使用dedefault matplotlib颜色着色'C0'
。如果 \(t\) 小于或等于零,则所有节点都着色'C0'
。如果color_threshold
为NONE或“DEFAULT”,对应于MATLAB(TM)行为,则将阈值设置为0.7*max(Z[:,2])
。- get_leaves布尔值,可选
包括一个列表
R['leaves']=H
在结果字典中。对于每个 \(i\) ,H[i] == j
,群集节点j
出现在合适的位置i
在从左向右遍历树叶的过程中, \(j < 2n-1\) 和 \(i < n\) 。- orientation字符串,可选
绘制树状图的方向,可以是以下任何字符串:
'top'
在顶部打印根,并向下打印派生链接。(默认)。
'bottom'
在底部打印根,并向上打印派生链接。
'left'
在左侧打印根,向右打印派生链接。
'right'
在右侧打印根,并向左打印派生链接。
- labelsndarray,可选
默认情况下,
labels
为None,则使用原始观测的索引来标记叶节点。否则,这是一个 \(n\) -大小的序列,带n == Z.shape[0] + 1
。这个labels[i]
值是要放在 \(i\) 此叶节点仅在其对应于原始观测而不是非单一群集的情况下。- count_sort字符串或布尔值,可选
对于每个节点n,绘制n的两个派生链接的顺序(直观地从左到右)由此参数确定,可以是下列值之一:
False
什么都没做。
'ascending'
orTrue
首先打印其簇中原始对象数量最少的子对象。
'descending'
首先打印其簇中原始对象数量最多的子对象。
请注意,
distance_sort
和count_sort
不能两个都是True。- distance_sort字符串或布尔值,可选
对于每个节点n,绘制n的两个派生链接的顺序(直观地从左到右)由此参数确定,可以是下列值之一:
False
什么都没做。
'ascending'
orTrue
首先打印其直接后代之间距离最小的子项。
'descending'
首先打印其直接后代之间距离最大的子项。
注意事项
distance_sort
和count_sort
不能两个都是True。- show_leaf_counts布尔值,可选
如果为True,则表示 \(k>1\) 原始观测值在括号中标有它们包含的观测值的数量。
- no_plot布尔值,可选
如果为True,则不执行最终渲染。如果只需要为渲染计算的数据结构,或者matplotlib不可用,则此选项非常有用。
- no_labels布尔值,可选
如果为True,则树状图渲染中的叶节点旁边不会显示任何标签。
- leaf_rotation双倍,可选
指定旋转叶标签的角度(以度为单位)。如果未指定,则旋转基于树状图中的节点数(默认值为0)。
- leaf_font_size整型,可选
指定叶标签的字体大小(以磅为单位)。未指定时,基于树状图中的节点数的大小。
- leaf_label_funcλ或函数,可选
什么时候
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`` 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 使用与它将绘制的每个U形链接相对应的每个非单例id调用。该函数应该返回绘制链接的颜色,编码为matplotlib颜色字符串代码。例如::
dendrogram(Z, link_color_func=lambda k: colors[k])
为每个未截断的非单一节点下方的直接链接着色
k
使用colors[k]
。- axmatplotlib轴实例,可选
如果没有,并且 no_plot 不为True,则树状图将绘制在当前轴上。否则,如果 no_plot 不是真的树状图将绘制在给定的
Axes
实例。如果树状图是更复杂图形的一部分,这可能会很有用。- above_threshold_color字符串,可选
此matplotlib颜色字符串将链接的颜色设置在COLOR_THRESHOLD之上。默认值为
'C0'
。
- 退货
- RDICT
计算以呈现树状图的数据结构字典。ITS具有以下密钥:
'color_list'
颜色名称列表。第k个元素表示第k个链接的颜色。
'icoord'
and'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]
要单调,否则树状图上会出现交叉。示例
>>> 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()