按平均簇值标记 Scipy 树状图
Label Scipy Dendrogram by Average Cluster Value
我根据一些标记为 0-9 的数据点计算出一个树状图。
如何从 scipy.cluster.hiearchy.dendrogram
的输出中检索每个节点中的数据点 (0-9)?我想用它的平均 (x,y) 值来标记每个节点。
我知道我可以使用聚类算法(例如 Scikit 学习凝聚聚类)检索聚类,但我想用每个节点中的平均值标记整个树状图。
from matplotlib import pyplot as plt
from scipy.cluster.hierarchy import dendrogram, linkage
from scipy.spatial.distance import pdist, squareform
import numpy as np
np.random.seed(4711)
X = np.random.uniform(-10,10,size=(10,2))
labels=[i for i in range(len(X))]
fig,ax=plt.subplots()
ax.scatter(X[:,0], X[:,1])
dist=squareform(pdist(X))
Y = linkage(squareform(dist), method='complete')
Z1 =dendrogram(Y, labels=labels, orientation='left')
例如,在上面的树状图中,我想将连接点 6,4 的节点标记为点 6 和点 4 的 x 和 y 值的平均值。(X[6]+X[4])/2
等
scipy.cluster.hiearchy.dendrogram
输出包含 color_list
、icoord
、dcoord
、ivl
、leaves
、leaves_colorlist
的字典.我觉得我应该能够将 ivl
与 leaves
和坐标结合使用,但我不确定如何解释 it/use 它。
(documentation for dendrogram)
谢谢。
您可以使用 leaf_label_func
参数。
from matplotlib import pyplot as plt
from scipy.cluster.hierarchy import dendrogram, linkage
from scipy.spatial.distance import pdist, squareform
import numpy as np
np.random.seed(4711)
# X will be interpreted as cluster centers
X = np.random.uniform(-10,10,size=(10,2))
def llf(id):
return f'Cluster #{id} @ {X[id]}'
Y = linkage(pdist(X), method='complete')
Z1 =dendrogram(Y, leaf_label_func=llf, get_leaves=True, orientation='left')
我还用 pdist(dist)
替换了 squareform(squareform(pdist(dist)))
。
我根据一些标记为 0-9 的数据点计算出一个树状图。
如何从 scipy.cluster.hiearchy.dendrogram
的输出中检索每个节点中的数据点 (0-9)?我想用它的平均 (x,y) 值来标记每个节点。
我知道我可以使用聚类算法(例如 Scikit 学习凝聚聚类)检索聚类,但我想用每个节点中的平均值标记整个树状图。
from matplotlib import pyplot as plt
from scipy.cluster.hierarchy import dendrogram, linkage
from scipy.spatial.distance import pdist, squareform
import numpy as np
np.random.seed(4711)
X = np.random.uniform(-10,10,size=(10,2))
labels=[i for i in range(len(X))]
fig,ax=plt.subplots()
ax.scatter(X[:,0], X[:,1])
dist=squareform(pdist(X))
Y = linkage(squareform(dist), method='complete')
Z1 =dendrogram(Y, labels=labels, orientation='left')
例如,在上面的树状图中,我想将连接点 6,4 的节点标记为点 6 和点 4 的 x 和 y 值的平均值。(X[6]+X[4])/2
等
scipy.cluster.hiearchy.dendrogram
输出包含 color_list
、icoord
、dcoord
、ivl
、leaves
、leaves_colorlist
的字典.我觉得我应该能够将 ivl
与 leaves
和坐标结合使用,但我不确定如何解释 it/use 它。
(documentation for dendrogram)
谢谢。
您可以使用 leaf_label_func
参数。
from matplotlib import pyplot as plt
from scipy.cluster.hierarchy import dendrogram, linkage
from scipy.spatial.distance import pdist, squareform
import numpy as np
np.random.seed(4711)
# X will be interpreted as cluster centers
X = np.random.uniform(-10,10,size=(10,2))
def llf(id):
return f'Cluster #{id} @ {X[id]}'
Y = linkage(pdist(X), method='complete')
Z1 =dendrogram(Y, leaf_label_func=llf, get_leaves=True, orientation='left')
我还用 pdist(dist)
替换了 squareform(squareform(pdist(dist)))
。