5步上手教你绘制Heatmap

5步上手教你绘制Heatmap

Heatmap用颜色来表示数据值,是对数据的一种图形化展示。它用不同颜色来向读者展示数值的大小。尤其是在数据量大的时候,它能够辅助读者更好地了解数据。

在这篇文章里,我会带着你通过五个简单步骤,自己绘制一张标注好数据值的相关矩阵的Heatmap。

  1. 导入数据
  2. 创建相关矩阵
  3. 设置隐藏上三角矩阵
  4. 使用Seaborn包创建Heatmap
  5. 导出Heatmap

1. 导入数据

df = pd.read_csv(“Highway1.csv”, index_col = 0)

这个高速公路事故数据集包含了机动车的事故发生率(车辆每行驶一百万英里所发生的事故数)和一些其他变量。关于这个数据集的更多信息可以在这里找到。

2. 创建相关矩阵

corr_matrix = df.corr()

我们用.corr来创建相关矩阵。‘htype’列由于不是数值型数据,所以它不在矩阵中。我们需要把它转化为虚拟变量 (Dummy Variable) 来计算与它有关的相关性。

df_dummy = pd.get_dummies(df.htype)
df = pd.concat([df, df_dummy], axis = 1)

另外我们注意到,这个相关矩阵的上三角矩阵与下三角矩阵是对称的,所以我们不需要展示整个矩阵。我们将会在下一步隐藏掉上三角矩阵。

3. 设置隐藏上三角矩阵

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

我们把上面的代码拆开看。np.zeros_like() 返回的是和原数组相同形状和数据类型的、都为零的数组。把它带入相关矩阵上以后,我们就能得到如下图的全零数组。

dtype=np.bool参数覆盖了原本的数据类型,所以我们现在的数组都是布尔值。

np.triu_indices_from(mask) 返回了数组上三角矩阵的位置。

现在我们将上三角矩阵设置为True:

mask[np.triu_indices_from(mask)]= True

现在我们可以隐藏上三角矩阵来生成Heatmap了。

4. 使用Seaborn创建Heatmap

f, ax = plt.subplots(figsize=(11, 15)) 
heatmap = sns.heatmap(corr_matrix,
                       mask = mask,
                      square = True,
                      linewidths = .5,
                      cmap = ’coolwarm’,
                      cbar_kws = {'shrink': .4,
                                 ‘ticks’ : [-1, -.5, 0, 0.5, 1]},
                      vmin = -1,
                       vmax = 1,
                      annot = True,
                      annot_kws = {“size”: 12})
#add the column names as labels
ax.set_yticklabels(corr_matrix.columns, rotation = 0)
ax.set_xticklabels(corr_matrix.columns)
sns.set_style({'xtick.bottom': True}, {'ytick.left': True})

我们带入第3步中的相关矩阵,和第4步中的隐藏设置来创建Heatmap。我们还会带入其他一些自定义的参数来使Heatmap更美观。下图罗列了每个参数的说明,如果你有兴趣想理解每一行在做什么的话,可以看一看。

#Makes each cell square-shaped.
square = True,
#Set width of the lines that will divide each cell to .5
linewidths = .5,
#Map data values to the coolwarm color space
cmap = 'coolwarm',
#Shrink the legend size and label tick marks at [-1, -.5, 0, 0.5, 1]
cbar_kws = {'shrink': .4, ‘ticks’ : [-1, -.5, 0, 0.5, 1]},
#Set min value for color bar
vmin = -1,
 #Set max value for color bar
vmax = 1,
#Turn on annotations for the correlation values
annot = True,
#Set annotations to size 12
annot_kws = {“size”: 12})
#Add column names to the x labels ax.set_xticklabels(corr_matrix.columns)
#Add column names to the y labels and rotate text to 0 degrees
ax.set_yticklabels(corr_matrix.columns, rotation = 0)
#Show tickmarks on bottom and left of heatmap
sns.set_style({'xtick.bottom': True}, {'ytick.left': True})

5. 导出Heatmap

现在你已经创建好Heatmap了,我们来导出它。

heatmap.get_figure().savefig(‘heatmap.png’, bbox_inches=’tight’)

如果你生成了非常大的Heatmap导致无法正常导出的话,可以使用bbox_inches = ‘tight’来防止你的图片被剪裁。

原文作者:Julia Kho

翻译作者:Shuang Lu

美工编辑:过儿

校对审稿:Dongdong

原文链接:https://towardsdatascience.com/annotated-heatmaps-in-5-simple-steps-cc2a0660a27d