python - 如何将相关热图限制在感兴趣的单元格上并添加星号来标记异常值?
问题描述
我正在尝试在 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);
现在我想在有效单元格中添加(*):(例如:当系数高于或低于某个值时)
非常感谢您的回答,如果我遗漏了我的请求中的任何内容,请告诉我,我会提供。
解决方案
要显示更少的单元格,您可以扩展蒙版,屏蔽掉不需要的值。不仅可以设置annot=True
,还可以提供字符串列表。您完全控制如何格式化这些字符串,例如附加星号:
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
import seaborn as sns
np.random.seed(124)
Correlazioni = pd.DataFrame(np.random.rand(7, 10), columns=[*'abcdefghij'])
plt.figure(figsize=(16, 6))
corr = Correlazioni.corr()
mask = np.triu(np.ones_like(corr, dtype=np.bool))
cut_off = 0.6 # only show cells with abs(correlation) at least this value
extreme_1 = 0.75 # show with a star
extreme_2 = 0.85 # show with a second star
extreme_3 = 0.90 # show with a third star
mask |= np.abs(corr) < cut_off
corr = corr[~mask] # fill in NaN in the non-desired cells
remove_empty_rows_and_cols = True
if remove_empty_rows_and_cols:
wanted_cols = np.flatnonzero(np.count_nonzero(~mask, axis=1))
wanted_rows = np.flatnonzero(np.count_nonzero(~mask, axis=0))
corr = corr.iloc[wanted_cols, wanted_rows]
annot = [[f"{val:.4f}"
+ ('' if abs(val) < extreme_1 else '\n★') # add one star if abs(val) >= extreme_1
+ ('' if abs(val) < extreme_2 else '★') # add an extra star if abs(val) >= extreme_2
+ ('' if abs(val) < extreme_3 else '★') # add yet an extra star if abs(val) >= extreme_3
for val in row] for row in corr.to_numpy()]
heatmap = sns.heatmap(corr, vmin=-1, vmax=1, annot=annot, fmt='', cmap='BrBG')
heatmap.set_title('Triangle Correlation Heatmap', fontdict={'fontsize': 18}, pad=16)
plt.show()
这是删除空行和空列后的样子。请注意,它看起来不再是完美的三角形了。
推荐阅读
- mysql - 在 MySql 中将 2 个 select 语句转换为单个语句
- javascript - 仅在 javascript 上加载第一张图片
- java - 如何在java中使用地图创建JSONArray
- cordova - 什么时候清除cordova http缓存?
- react-native - 从 React Native 中的 Stack Navigator 顶部删除 Header
- javascript - 如何使用更改流来查看 MongoDB 中具有特定文档 ID 的文档?
- flutter - Flutter:如何在多个类中使用函数结果作为var而不重复函数
- python - 如何正确地将对数比例图与背景图像结合起来?
- excel - Excel 宏将数据从主工作表填充到多个模板工作表中
- c# - C#/.Net CIL - ldarga.s 如何获取索引/参数(ldarga.s vs ldarga vs ldarga.0 操作码)?