Python中如何修改层次聚类树状图(Dendrogram)的标签
层次聚类树状图标签替换方案
已完成的聚类步骤
你已经通过以下代码实现25类层次聚类,并为数据框df添加了聚类结果列class:
from sklearn.cluster import AgglomerativeClustering hc = AgglomerativeClustering(n_clusters = 25, affinity = 'euclidean', linkage = 'ward') y_hc = hc.fit_predict(df) df['class'] = y_hc
树状图标签修正方案
要将树状图的叶子标签从默认计数替换为你生成的聚类标签(即class列的值),只需调整dendrogram函数的labels参数,并确保特征数据和聚类时保持一致:
from scipy.cluster import hierarchy import matplotlib.pyplot as plt # 生成链接矩阵:使用聚类时的特征列(排除最后一列的class) linkage_matrix = hierarchy.linkage(df.iloc[:, :-1], method='ward', metric='euclidean') plt.figure(figsize=(12, 6)) dendrogram = hierarchy.dendrogram( linkage_matrix, labels=df['class'].values, # 替换为聚类结果列 p=25, truncate_mode='lastp', leaf_font_size=10, leaf_rotation=90 ) plt.xlabel('Genomes') plt.ylabel('Euclidean distances') plt.title(f'Hierarchical Clustering Dendrogram (method="ward")') plt.show()
关键注意点
- 确认
linkage函数使用的特征数据和AgglomerativeClustering拟合时完全一致,避免树状图与聚类结果不匹配; - 若样本量过大导致标签重叠,可进一步调小
leaf_font_size或增大图的figsize。
内容的提问来源于stack exchange,提问作者Fatemeh Nazari
相关产品推荐
相关产品推荐

