去掉热力图的部分内容,这样使得重点更清晰。还是来个小案例演示。

1
2
3
4
5
6
7
# 导入包
import seaborn as sns
import numpy as np
from pandas import Series,DataFrame
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
1
2
3
4
5
# 拿到小费数据集
tips = sns.load_dataset('titanic')

# 查看前5行数据
tips.head()

image.png

1
2
corr = tips.corr()
corr

image.png

1
2
plt.figure(figsize=(10, 6))
sns.heatmap(corr,square=True, annot=True, fmt='0.2f')

image.png

1
2
3
4
5
plt.figure(figsize=(10, 6))  # 指定绘图对象宽度和高度
mask = np.zeros_like(corr, dtype=np.bool) # 构造与corr同维数矩阵为bool型矩阵
mask[np.triu_indices_from(mask)] = True # 角分线右侧为True
g = sns.heatmap(corr, mask=mask,square=True, annot=True, fmt='0.2f') # 热力图(看两两相似度)
plt.show()

output_4_0.png

其中,mask[np.triu_indices_from(mask)] = True 将 mask 的对角线及以上设置为 True。这部分就是对应要被遮掉的部分,不清楚可以把mask 打印出来看看。

还有一个关键点是 sns.heatmap() 的 mask 参数:布尔数组或者 DataFrame 数据,可选参数。如果为空值,数据将不会显示在 maskTrue 的单元格中。 具有缺失值的单元格将自动被屏蔽。所以,将 mask 设置为 True 是为了有一个掩码可以去掉右上角的数据。

1
2
3
mask = np.zeros_like(corr, dtype=np.bool)  # 构造与corr同维数矩阵为bool型
mask[np.triu_indices_from(mask)] = True # 角分线右侧为True
mask
1
2
3
4
5
6
7
8
array([[ True,  True,  True,  True,  True,  True,  True,  True],
[False, True, True, True, True, True, True, True],
[False, False, True, True, True, True, True, True],
[False, False, False, True, True, True, True, True],
[False, False, False, False, True, True, True, True],
[False, False, False, False, False, True, True, True],
[False, False, False, False, False, False, True, True],
[False, False, False, False, False, False, False, True]])