如何在此热图上添加遮罩?

How do i put a mask on this heatmap?

我已经在上面创建了整个数据集的热图,但是现在我想为与我的目标变量最相关的 10 个点创建热图。我已经打印了数据和掩码的形状,它们都是 10 x 10,但是我得到了这个错误:

ValueError: Mask must have the same shape as the data.

我使用了来自 kaggle 的虚拟数据集作为示例。

    corr = training.corr()

    mask = np.zeros_like(corr, dtype=np.bool)
    mask[np.triu_indices_from(mask)] = True

    f, ax = plt.subplots(figsize=(12, 9))

    sns.heatmap(corr, mask=mask,vmin=0.0, vmax=1.0, center=0,
        square=True, linewidths=.5, cbar_kws={"shrink": .5})

我的代码的第一部分(上面)计算了整个数据集的热图,并在数据的上半部分使用了掩码。

    k = 10

    cols = corr.nlargest(k, 'SalePrice')['SalePrice'].index

    cm = np.corrcoef(training[cols].values.T)

    sns.set(font_scale=1.25)

    f, ax = plt.subplots(figsize=(12, 9))

    mask2 = np.zeros_like(cm, dtype=np.bool)
    mask2[np.triu_indices_from(mask2)] = True

    hm = sns.heatmap(cm, vmin=0.0, vmax=1.0, mask=mask, cbar=True, 
    annot=True, square=True, fmt='.2f', annot_kws={'size': 10},
    yticklabels=cols.values, xticklabels=cols.values)

    plt.show()

这应该输出上半部分(重复值)被屏蔽的热图。

emphasized texti 已经看到我的代码中的错误,这是一个非常糟糕的拼写错误。我已将错误放在“**”中以指示粗体文本书写(我将 mask = mask - 这是先前数据集的掩码并且形状不同)。如果您正在处理它,谢谢...也许有更短的方法来完成此代码,所以请继续分享。

**mask2** = np.zeros_like(cm, dtype=np.bool)
**mask2**[np.triu_indices_from(mask2)] = True

hm = sns.heatmap(cm, vmin=0.0, vmax=1.0, mask=**mask**, cbar=True, 
annot=True, square=True, fmt='.2f', annot_kws={'size': 10},
yticklabels=cols.values, xticklabels=cols.values)