我有以下代码来对数据执行分层聚类:
Z = linkage(data,method='weighted')
plt.subplot(2,1,1)
dendro = dendrogram(Z)
leaves = dendro['leaves']
print leaves
plt.show()
然而,在树状图中,所有簇都具有相同的颜色(蓝色)。有没有办法针对集群之间的相似性使用不同的颜色?
我有以下代码来对数据执行分层聚类:
Z = linkage(data,method='weighted')
plt.subplot(2,1,1)
dendro = dendrogram(Z)
leaves = dendro['leaves']
print leaves
plt.show()
然而,在树状图中,所有簇都具有相同的颜色(蓝色)。有没有办法针对集群之间的相似性使用不同的颜色?
查看文档,看起来您可以传递link_color_func
关键字或color_threshold
关键字以具有不同的颜色。
编辑:
树状图着色方案的默认行为是,如果第一个节点低于切割阈值,则将color_threshold = 0.7*max(Z[:,2])
集群节点下方的所有后代链接着色k
为相同颜色;k
否则,连接距离大于或等于阈值的节点的所有链接都是蓝色的[来自文档]。
这到底是什么意思?好吧,如果你看一个树状图,不同的集群连接在一起。两个集群之间的“距离”是它们之间链接的高度。这color_threshold
是新集群将具有不同颜色的高度。如果你所有的集群都是蓝色的,那么你需要提高你的color_threshold
. 例如,
In [48]: mat = np.random.rand(10, 10)
In [49]: z = linkage(mat, method="weighted")
In [52]: d = dendrogram(z)
In [53]: d['color_list']
Out[53]: ['g', 'g', 'b', 'r', 'c', 'c', 'c', 'b', 'b']
In [54]: plt.show()
我可以检查默认值color_threshold
是什么
In [56]: 0.7*np.max(z[:,2])
Out[56]: 1.0278719020096947
如果我降低color_threshold
,我会得到更多的蓝色,因为更多的链接比新链接的距离更大color_threshold
。您可以直观地看到这一点,因为 0.9 以上的所有链接现在都是蓝色的:
In [64]: d = dendrogram(z, color_threshold=.9)
In [65]: d['color_list']
Out[65]: ['g', 'b', 'b', 'r', 'b', 'b', 'b', 'b', 'b']
In [66]: plt.show()
如果我增加color_threshold
to 1.2
,下面的链接1.2
将不再是蓝色的。此外,青色和红色链接将合并为一种颜色,因为它们的父链接如下1.2
: