You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在单个画布上通过子图绘制6种不同Linkage类型的树状图?

解决方法

你的问题核心在于每次循环都调用plt.figure()创建新画布,导致每个树状图单独显示。要把6个图放在同一画布的子图中,按以下方式修改代码:

修改后的代码

import matplotlib.pyplot as plt
from scipy.cluster import hierarchy

linkage_types = ['single', 'complete', 'average', 'weighted', 'centroid', 'ward']
# 创建2行3列的子图布局,可根据需求调整figsize
fig, axes = plt.subplots(nrows=2, ncols=3, figsize=(30, 15))
# 扁平化子图数组,方便循环遍历
axes = axes.flatten()

for idx, link_type in enumerate(linkage_types):
    Z = hierarchy.linkage(X, link_type)
    # 获取当前子图对象
    ax = axes[idx]
    # 指定子图绘制树状图
    hierarchy.dendrogram(Z,
                        leaf_rotation=90,
                        leaf_font_size=10,
                        labels=Label,
                        ax=ax)
    # 设置子图标题与坐标轴标签
    ax.set_title(f'Hierarchical Clustering on Covid Data: {link_type}', size=14)
    ax.set_xlabel('State', size=12)

# 自动调整子图间距,避免标题、标签重叠
plt.tight_layout()
plt.show()

关键修改说明

  • 用plt.subplots()一次性生成包含6个子图的画布,替代循环中重复创建新画布的操作
  • 扁平化子图数组,确保能按顺序逐个分配给不同的linkage类型
  • 调用hierarchy.dendrogram()时指定ax参数,将图绑定到对应子图上
  • 用plt.tight_layout()自动优化子图布局,解决元素重叠问题

内容的提问来源于stack exchange,提问作者AshleyLee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 05:15:45