如何将相关热图限制为感兴趣的单元格并添加星号来标记特殊值?

Fil*_*ppo 3 python heatmap correlation seaborn

我正在尝试在 python 中制作一个很好的相关矩阵热图,但我找不到按照我想要的方式自定义它的选项。

我的代码就是这样:

plt.figure(figsize=(16, 6))
mask = np.triu(np.ones_like(Correlazioni.corr(), dtype=np.bool))
heatmap = sns.heatmap(Correlazioni.corr(), mask=mask, vmin=-1, vmax=1, annot=True, cmap='BrBG')
heatmap.set_title('Triangle Correlation Heatmap', fontdict={'fontsize':18}, pad=16);
Run Code Online (Sandbox Code Playgroud)

现在我想在重要单元格中添加(*):(例如:当系数高于或低于某个值时)

非常感谢您的答复,如果我的请求中有任何遗漏,请告诉我,我会提供。

Joh*_*anC 6

要显示更少的单元格,您可以扩展掩码,屏蔽掉不需要的值。\n除了设置 之外annot=True,还可以提供字符串列表。您可以完全控制如何格式化这些字符串,例如附加星号:

\n
import numpy as np\nimport pandas as pd\nfrom matplotlib import pyplot as plt\nimport seaborn as sns\n\nnp.random.seed(124)\nCorrelazioni = pd.DataFrame(np.random.rand(7, 10), columns=[*\'abcdefghij\'])\n\nplt.figure(figsize=(16, 6))\ncorr = Correlazioni.corr()\nmask = np.triu(np.ones_like(corr, dtype=np.bool))\ncut_off = 0.6  # only show cells with abs(correlation) at least this value\nextreme_1 = 0.75  # show with a star\nextreme_2 = 0.85  # show with a second star\nextreme_3 = 0.90  # show with a third star\nmask |= np.abs(corr) < cut_off\ncorr = corr[~mask]  # fill in NaN in the non-desired cells\n\nremove_empty_rows_and_cols = True\nif remove_empty_rows_and_cols:\n    wanted_cols = np.flatnonzero(np.count_nonzero(~mask, axis=1))\n    wanted_rows = np.flatnonzero(np.count_nonzero(~mask, axis=0))\n    corr = corr.iloc[wanted_cols, wanted_rows]\n\nannot = [[f"{val:.4f}"\n          + (\'\' if abs(val) < extreme_1 else \'\\n\xe2\x98\x85\')  # add one star if abs(val) >= extreme_1\n          + (\'\' if abs(val) < extreme_2 else \'\xe2\x98\x85\')  # add an extra star if abs(val) >= extreme_2\n          + (\'\' if abs(val) < extreme_3 else \'\xe2\x98\x85\')  # add yet an extra star if abs(val) >= extreme_3\n          for val in row] for row in corr.to_numpy()]\nheatmap = sns.heatmap(corr, vmin=-1, vmax=1, annot=annot, fmt=\'\', cmap=\'BrBG\')\nheatmap.set_title(\'Triangle Correlation Heatmap\', fontdict={\'fontsize\': 18}, pad=16)\nplt.show()\n
Run Code Online (Sandbox Code Playgroud)\n

热图示例

\n

这是删除空行和空列后的样子。请注意,它看起来不再是完美的三角形了。

\n

删除空行/列

\n