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

如何为Seaborn clustermap的指定行列添加斜线填充?

为Seaborn Clustermap指定行列添加斜线填充

seaborn.clustermap本身没有直接添加斜线填充的内置参数,但可以通过获取聚类后的轴对象,结合Matplotlib的hatch属性实现需求,具体步骤如下:


实现步骤

  1. 绘制聚类热图并保存ClusterGrid对象
    先执行你的代码,保存返回的ClusterGrid实例,这样能获取聚类后的行列重排顺序:

    import seaborn as sns
    import matplotlib.pyplot as plt
    import numpy as np
    
    labels = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v"]
    # 用随机数据模拟你的数据集,实际替换为你的data即可
    data = np.random.rand(22, 22)
    g = sns.clustermap(data, cmap=sns.cm.rocket_r, xticklabels=labels, yticklabels=labels)
    
  2. 定位聚类后目标行列的索引
    聚类会打乱原始行列顺序,需要先找到目标标签m、o、d、n、p在重排后的位置:

    # 提取聚类后的行/列标签文本
    row_labels = [label.get_text() for label in g.ax_heatmap.get_yticklabels()]
    col_labels = [label.get_text() for label in g.ax_heatmap.get_xticklabels()]
    
    # 找到目标标签对应的索引
    target_tags = ["m", "o", "d", "n", "p"]
    target_row_idx = [row_labels.get_loc(tag) for tag in target_tags]
    target_col_idx = [col_labels.get_loc(tag) for tag in target_tags]
    
  3. 为目标单元格添加斜线填充
    遍历热图的所有单元格,给目标行列的单元格设置hatch='//'属性:

    # 遍历热图的每个单元格
    total_cols = len(col_labels)
    for i in range(len(row_labels)):
        for j in range(total_cols):
            # 判断当前单元格是否属于目标行或目标列
            if i in target_row_idx or j in target_col_idx:
                # 获取对应单元格的矩形对象
                rect = g.ax_heatmap.patches[i * total_cols + j]
                rect.set_hatch('//')
                # 调整透明度,避免遮挡热图颜色
                rect.set_alpha(0.6)
    
    plt.show()
    

简化方案(针对整行/整列区域填充)

如果不需要给单个单元格加填充,而是给整个目标行/列区域添加斜线覆盖,可以直接绘制矩形:

# 给目标行区域添加斜线填充
y_start, y_end = g.ax_heatmap.get_ylim()
for idx in target_row_idx:
    g.ax_heatmap.add_patch(plt.Rectangle(
        (0, idx), total_cols, 1, hatch='//', fill=False, alpha=0.4, color='gray'
    ))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 01:45:10