1.引言

热力图的想法很简单,用颜色替换数字。

现在,这种可视化风格已经从最初的颜色编码表格走了很长一段路。热力图被广泛用于地理空间数据。这种图通常用于描述变量的密度或强度,模式可视化、方差甚至异常可视化等。

鉴于热力图有如此多的应用,本文将介绍如何使用Seaborn 来创建热力图。

2. 举个栗子

首先我们导入Pandas和Numpy库,这两个库可以帮助我们进行数据预处理。

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sb
import numpy as np

为了举例,我们采用的数据集是 80 种不同谷物的样本,我们来看看它们的成分。数据集样例如下所示:


上图中,第一行为表头,接着对于每一行来说,第一列为谷物的名称,后面第4列到16列为每种谷物含有的13种主要组成成分的数值。

3. 数据预处理

解下来我们分析每种谷物13种不同成分之间的相关性,我们可以采用Pandas库中的coor()函数来计算相关性,代码如下:

# read dataset
df = pd.read_csv('data/cereal.csv')
# get correlations
df_corr = df.corr()  # 13X13
print(df_corr)

得到结果如下:

          calories   protein       fat  ...    weight      cups    rating
calories  1.000000  0.019066  0.498610  ...  0.696091  0.087200 -0.689376
protein   0.019066  1.000000  0.208431  ...  0.216158 -0.244469  0.470618
fat       0.498610  0.208431  1.000000  ...  0.214625 -0.175892 -0.409284
sodium    0.300649 -0.054674 -0.005407  ...  0.308576  0.119665 -0.401295
fiber    -0.293413  0.500330  0.016719  ...  0.247226 -0.513061  0.584160
carbo     0.250681 -0.130864 -0.318043  ...  0.135136  0.363932  0.052055
sugars    0.562340 -0.329142  0.270819  ...  0.450648 -0.032358 -0.759675
potass   -0.066609  0.549407  0.193279  ...  0.416303 -0.495195  0.380165
vitamins  0.265356  0.007335 -0.031156  ...  0.320324  0.128405 -0.240544
shelf     0.097234  0.133865  0.263691  ...  0.190762 -0.335269  0.025159
weight    0.696091  0.216158  0.214625  ...  1.000000 -0.199583 -0.298124
cups      0.087200 -0.244469 -0.175892  ... -0.199583  1.000000 -0.203160
rating   -0.689376  0.470618 -0.409284  ... -0.298124 -0.203160  1.000000[13 rows x 13 columns]

接着我们移除相关性不大的最后几个成分,代码如下:

# irrelevant fields
fields = ['rating', 'shelf', 'cups', 'weight']
# drop rows
df_corr.drop(fields, inplace=True) # 9X13
# drop cols
df_corr.drop(fields, axis=1, inplace=True) # 9X9
print(df_corr)

得到结果如下:

我们知道相关性矩阵是对称矩阵,矩阵中上三角和下三角的值是相同的,这带来了很大的重复。

4. 画热力图

非常幸运的是我们可以使用Mask矩阵来生成Seaborn中的热力图,那么我们首先来生成Mask矩阵。

np.ones_like(df_corr, dtype=np.bool)

结果如下:

接着我们来得到上三角矩阵,在Numpy中使用np.triu函数可以返回上三角矩阵对应的Mask,如下所示:

mask = np.triu(np.ones_like(df_corr, dtype=np.bool))

结果如下:

接下来我们画热力图,如下所示:

sb.heatmap(df_corr,mask=mask)
plt.show()

此时的运行结果如下:

5. 添加数值

观察上图,我们虽然使用Mask生成了热力图,但是图像中还有两个空的单元格(红色圆圈所示)。

我们当然可以在绘制的时候将其进行过滤。即分别将和上述圆圈对应的mask和df_corr过滤掉,代码如下:

# adjust mask and df
mask = mask[1:, :-1]
corr = df_corr.iloc[1:, :-1].copy()

同时我们可以设置heatmap相应的参数,让其显示对应的数值,完整代码如下:

def test2():# read datasetdf = pd.read_csv('data/cereal.csv')# get correlationsdf_corr = df.corr()  # 13X13# irrelevant fieldsfields = ['rating', 'shelf', 'cups', 'weight']df_corr.drop(fields, inplace=True)  # 9X13# drop colsdf_corr.drop(fields, axis=1, inplace=True)  # 9X9mask = np.triu(np.ones_like(df_corr, dtype=np.bool))# adjust mask and dfmask = mask[1:, :-1]corr = df_corr.iloc[1:, :-1].copy()# plot heatmapsb.heatmap(corr, mask=mask, annot=True, fmt=".2f", cmap='Blues',vmin=-1, vmax=1, cbar_kws={"shrink": .8})# yticksplt.yticks(rotation=0)plt.show()

运行结果如下:

6. 调色板优化

接着我们继续优化可视化的效果,考虑到相关系数的范围为-1到1,所以颜色变化有两个方向。基于此,由中间向两侧发散的调色板相比连续的调色板视觉效果会更好。如下所示为发散的调色板示例:

在Seaborn库中存在生成发散调色板的函数 driverging_palette,该函数用于构建colormaps,每侧使用一种颜色,并在中心汇聚成另一种颜色。
这个函数的完整形式如下:

diverging_palette(h_neg, h_pos, s=75, l=50, sep=1,n=6, center=“light”, as_cmap=False)

该函数使用颜色表示形式为HUSL,即hue,Saturation和Lightness。这里我们查阅网站来选择我们接下来设置的调色板的颜色。

最后但是最最重要的一点,不要忘了在我们的图像上设置标题,使用title函数即可。

完整代码如下:

def test3():# read datasetdf = pd.read_csv('data/cereal.csv')# get correlationsdf_corr = df.corr()  # 13X13# irrelevant fieldsfields = ['rating', 'shelf', 'cups', 'weight']df_corr.drop(fields, inplace=True)  # 9X13# drop colsdf_corr.drop(fields, axis=1, inplace=True)  # 9X9fig, ax = plt.subplots(figsize=(12, 10))# maskmask = np.triu(np.ones_like(df_corr, dtype=np.bool))# adjust mask and dfmask = mask[1:, :-1]corr = df_corr.iloc[1:, :-1].copy()# color mapcmap = sb.diverging_palette(0, 230, 90, 60, as_cmap=True)# plot heatmapsb.heatmap(corr, mask=mask, annot=True, fmt=".2f",linewidths=5, cmap=cmap, vmin=-1, vmax=1,cbar_kws={"shrink": .8}, square=True)# ticksyticks = [i.upper() for i in corr.index]xticks = [i.upper() for i in corr.columns]plt.yticks(plt.yticks()[0], labels=yticks, rotation=0)plt.xticks(plt.xticks()[0], labels=xticks)# titletitle = 'CORRELATION MATRIX\nSAMPLED CEREALS COMPOSITION\n'plt.title(title, loc='left', fontsize=18)plt.show()

运行结果如下:

Wow,是不是看上去高大上了很多。人类果然还是视觉动物。

7. 总结

本文介绍了如何用Seaborn对相关矩阵使用热力图进行数据可视化,并不断改进提升可视化效果。

您学废了吗?


关注公众号《AI算法之道》,获取更多AI算法资讯。

参考

关注公众号,回复 Seaborn,即可获取完整代码。

数据可视化之使用Seaborn画热力图相关推荐

  1. Python数据可视化三部曲之 Seaborn 从上手到上头

      Python数据可视化三部曲之 Seaborn 从上手到上头 文章目录 1. 安装 seaborn 2.准备数据 3.背景与边框 3.1 设置背景风格 3.3 其他 3.2 边框控制 4. 绘制 ...

  2. matlab用数据画热力图,Web数据可视化-手把手教你实现热力图

    热力图简介 位置数据是连接线上线下的重要信息资源,在前端借助于图形化的手段将数据有效呈现是进行数据分析的重要手段.基于此,我们开发了基于地图的数据可视化组件,以附加库的形式加入到JSAPI中,目前主要 ...

  3. 数据可视化的利器-Seaborn简易入门

    Seaborn是针对统计绘图的,一般来说,Seaborn能满足数据分析90%的绘图需求.本站整理的Seaborn的41个样例代码,在github进行分享,绝大部分数据可视化的问题可以参考这里的样例代码 ...

  4. 【数据可视化】python/pyecharts 画地图(热力图)(世界地图,省市地图,区县地图)、动态流向图

    按照教程想通过pip下载地图素材,结果如下图所示--不匹配现有的version. upgrade pyecharts之后依旧无法satisfies 在pycharm中输入: import pyecha ...

  5. python数据可视化(matplotlib,seaborn,plotly)

    文章目录 资料链接 Matplotlib绘图基础 简单图形绘制 1.饼图 2.条形图 3.直方图 4.散点图 图形基本设置 统计图形实战 1.柱状图(堆积柱状图) 2.直方图(直方图,核密度图,正态分 ...

  6. Python数据可视化-matplotlib and seaborn

    作者:vinyyu 声明:版权所有,转载请注明出处,谢谢. 鸢尾花iris.csv文件 numpy, matplotlib, seaborn, pandas #准备好需要的库 import numpy ...

  7. 如何使用python画折线图-Python数据可视化:使用Python画柱状图和折线图

    Python爬虫太火了,没写过爬虫,都不敢说自己学过Python?! 可是刚一开始学我就遇到了难题----数据分析!听起来很高大上,有没有? 想要做爬虫,就得先学会使用数据分析工具,制作图表这是最基本 ...

  8. Pandas数据可视化工具:图表工具-Seaborn

    内容来源:https://www.jiqizhixin.com/articles/2019-01-30-15 简介 在本文中,我们将研究Seaborn,它是Python中另一个非常有用的数据可视化库. ...

  9. 十九、Seaborn数据可视化

    @Author:Runsen @Date:2019年07月07日 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专 ...

最新文章

  1. WCF分布式开发步步为赢(12):WCF事务机制(Transaction)和分布式事务编程
  2. ajax为什么会全局刷新,为什么发送ajax请求页面也会刷新呢?
  3. https 不会被中间人攻击——因为中间人即使拿到了数据,也是加密的
  4. vue组件之轮播图的实现
  5. 模糊逻辑系统_在模糊逻辑系统中工作 人工智能
  6. 【JVM】4、JVM类加载机制
  7. web农行支付php示例,ecshop,shopex完美实现农业银行(农行)在线支付接口
  8. index.php s 1 last,Nginx常用rewrite跳转重定向实例
  9. LuaForUnity6:Lua模块
  10. linux中dir命令,详解Linux系统中ls和dir命令的组合使用
  11. phpStudy启动失败提示:缺少VC9运行库
  12. InnoDB如何实现事务特性
  13. WordPress SEO 技巧
  14. 《服务外包概论》知识点梳理
  15. 安卓开发 Fragment的简单使用与解析
  16. 博创联动陶伟:农业机器人难做在哪儿?
  17. 赢在测试:中国软件测试先行者之道
  18. android9的手机,Android9.0全面适配18:9刘海屏,全面屏安卓手机即将大规模上市
  19. 蓝牙遥控器获取电量GATT
  20. RSD处理高分5号高光谱(GF5 AHSI)数据(二)——波段编辑复制和删除

热门文章

  1. 在正式使用计算机账务系统的银行对账功能,2005年初级会计电算化练习题(五)
  2. 什么是1G/2G/3G/4G/5G
  3. [从头学数学] 第188节 千军阅尽还复来(全)
  4. 第04项目:淘淘商城(SpringMvc+Spring+Mybatis) 的个人学习实践总结【第三天】
  5. Love ya 三三小说 炫舞爱情 ⑦
  6. __attribute__((weak))是什么意思
  7. 修复Ubuntu下驱动错误
  8. 进程同步算法实现实验报告Linux,进程同步:实验报告
  9. miui12 小窗模式
  10. 常用的android工具类和库