python 热力图_【Python可视化6】Seaborn之heatmap热力图

这篇博客介绍了如何使用Seaborn库在Python中创建热力图,展示了heatmap的基本用法,包括设置颜色带的范围、颜色系、分界线、数值注释等,并通过内置的flights数据集演示了热力图的应用,揭示了飞机乘客数量随时间的变化趋势和季节性特征。
摘要由CSDN通过智能技术生成

Seaborn是基于matplotlib的Python可视化库。它提供了一个高级界面来绘制有吸引力的统计图形。Seaborn其实是在matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,不需要经过大量的调整就能使你的图变得精致。

fd26391e007f21e9a62c7b14588b09ef.png

注:所有代码均在IPython notebook中实现

·  正  ·  文  ·  来  ·  啦  ·

heatmap 热力图

热力图在实际中常用于展示一组变量的相关系数矩阵,在展示列联表的数据分布上也有较大的用途,通过热力图我们可以非常直观地感受到数值大小的差异状况。heatmap的API如下所示:

f6189daf8efe67e571d137a875f7526d.png

下面将演示这些主要参数的用法,第一件事还是先导入相关的packages。

1import seaborn as sns
2%matplotlib inline
3sns.set(font_scale=1.5)

本次演示采用的数据集是Seaborn中内置的flights航班数据集

1#导入数据集后按年月两个维度进行数据透视
2data=sns.load_dataset("flights")\
3        .pivot("month","year","passengers") 
4data.head() 

549325dae9a930f0a2b71a24f029b0f0.png

如上图所示,dataframe中的数据代表了1949年-1960年每个月的航班乘客数量,接下来热力图就隆重登场啦!

1sns.set_context({"figure.figsize":(8,8)})
2sns.heatmap(data=data,square=True) 
3#可以看到热力图主要展示的是二维数据的数据关系
4#不同大小的值对应不同的颜色深浅

bd4adced59fbd65bc6b8701d6c23f544.png

热力图的右侧是颜色带,上面代表了数值到颜色的映射,数值由小到大对应色彩由暗到亮。从上面的heatmap中我们可以得到两层信息,一是随着时间的推移,飞机的乘客数量是在逐步增多的,二是航班的乘坐旺季在七月和八月份。下面就具体的参数进行演示。

vmax:设置颜色带的最大值vmin:设置颜色带的最小值

1sns.heatmap(data=data,vmin=200,
2            vmax=500)

c407164e65ffbb87fead8cba72decb9f.png

可以看到右侧的颜色带最大最小值变了,而heatmap中颜色映射关系也会随之调整,将本图和上面的图进行对比便一目了然。

cmap:设置颜色带的色系

1sns.heatmap(data=data,cmap="RdBu_r")

7d898f5765cc4732ac5cd56c99b24cf1.png

好像变好看了?

center:设置颜色带的分界线

1sns.heatmap(data=data,cmap="RdBu_r",
2            center=300)

    2ae01ce0f0bb5c73fa1f5a880aece098.png

细心的朋友可以察觉到颜色带上色彩两级的分界线变成了300

annot:是否显示数值注释

1sns.heatmap(data=data,annot=True,
2            cmap="RdBu_r")

f4b33d32d7e825a61d5fa4cba808c856.png

怎么回事?乱码了吗?其实数值注释默认显示的是科学记数法的数值,我们得把数值进行格式化,这就用到了下面的参数。

fmt:format的缩写,设置数值的格式化形式

1sns.heatmap(data=data,annot=True,
2            fmt="d",cmap="RdBu_r")
3#foramt为int类型

c4dd640b7b2f7e88f638cdd625bcbed2.png

linewidths:控制每个小方格之间的间距

1sns.heatmap(data=data,annot=True,
2            fmt="d",linewidths=0.3,
3            cmap="RdBu_r") 
4#可以看到每个小方格之产生了间隙

c3993f827fc881cb3952d69b014d0b8f.png

linecolor:控制分割线的颜色

1sns.heatmap(data=data,annot=True,
2            fmt="d",linewidths=0.3,
3            linecolor="grey",cmap="RdBu_r")
4#原来的白色间隙变成了灰色间隙

295ac217e7b16cd47affe72671a55114.png

cbar_kws:关于颜色带的设置

1sns.heatmap(data=data,annot=True,
2            fmt="d",cmap="RdBu_r",
3            cbar_kws={"orientation":"horizontal"})  
4#横向显示颜色帮

9ea85dc95077c946aafa44b8cd055628.png

mask:传入布尔型矩阵,若为矩阵内为True,则热力图相应的位置的数据将会被屏蔽掉(常用在绘制相关系数矩阵图)

 1import numpy as np
2#随机生成一个200行10列的数据集
3data_new = np.random.randn(200,10)
4
5#求出这个数据集的相关系数矩阵
6corr = np.corrcoef(data_new,rowvar=False)
7
8#以corr的形状生成一个全为0的矩阵
9mask = np.zeros_like(corr)
10
11#将mask的对角线及以上设置为True
12#这部分就是对应要被遮掉的部分
13mask[np.triu_indices_from(mask)] = True
14
15with sns.axes_style("white"):
16    sns.heatmap(corr, mask=mask, vmax=0.3, 
17                annot=True,cmap="RdBu_r")

e5f6cdd194d6d9aec4104cd8a104afc5.png

如果大家对上面的代码流程不大了解,可以把mask打印出来看看

277036fd914001bb256ffa57b11472dd.png

参照mask和上面绘制的图,应该就很容易理解了,mask中为1的部分,就是要被盖掉的部分。演示到此为止,想更深入的学习可以自行查阅官方文档!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值