原标题:【Python可视化6】Seaborn之heatmap热力图
Seaborn是基于matplotlib的Python可视化库。它提供了一个高级界面来绘制有吸引力的统计图形。Seaborn其实是在matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,不需要经过大量的调整就能使你的图变得精致。
注:所有代码均在IPython notebook中实现
· 正· 文· 来 · 啦 ·
heatmap 热力图
热力图在实际中常用于展示一组变量的相关系数矩阵,在展示列联表的数据分布上也有较大的用途,通过热力图我们可以非常直观地感受到数值大小的差异状况。heatmap的API如下所示:
下面将演示这些主要参数的用法,第一件事还是先导入相关的packages。
1importseaborn assns
2%matplotlib inline
3sns.set(font_scale= 1.5)
本次演示采用的数据集是Seaborn中内置的 flights航班数据集:
1#导入数据集后按年月两个维度进行数据透视
2data=sns.load_dataset( "flights")
3.pivot( "month", "year", "passengers")
4data.head
如上图所示,dataframe中的数据代表了1949年-1960年每个月的航班乘客数量,接下来热力图就隆重登场啦!
1sns.set_context({ "figure.figsize":( 8, 8)})
2sns.heatmap(data=data,square= True)
3#可以看到热力图主要展示的是二维数据的数据关系
4#不同大小的值对应不同的颜色深浅
热力图的右侧是颜色带,上面代表了数值到颜色的映射,数值由小到大对应色彩由暗到亮。从上面的heatmap中我们可以得到两层信息,一是随着时间的推移,飞机的乘客数量是在逐步增多的,二是航班的乘坐旺季在七月和八月份。下面就具体的参数进行演示。
vmax :设置颜色带的最大值
vmin :设置颜色带的最小值
1sns.heatmap(data=data,vmin= 200,
2vmax= 500)
可以看到右侧的颜色带最大最小值变了,而heatmap中颜色映射关系也会随之调整,将本图和上面的图进行对比便一目了然。
cmap :设置颜色带的色系
1sns.heatmap(data=data,cmap= "RdBu_r")
好像变好看了?
center :设置颜色带的分界线
1sns.heatmap(data=data,cmap= "RdBu_r",
2center= 300)
细心的朋友可以察觉到颜色带上色彩两级的分界线变成了300
annot :是否显示数值注释
1sns.heatmap(data=data,annot= True,
2cmap= "RdBu_r")
怎么回事?乱码了吗?其实数值注释默认显示的是 科学记数法的数值,我们得把数值进行格式化,这就用到了下面的参数。
fmt :format的缩写,设置数值的格式化形式
1sns.heatmap(data=data,annot= True,
2fmt= "d",cmap= "RdBu_r")
3#foramt为int类型
linewidths :控制每个小方格之间的间距
1sns.heatmap(data=data,annot= True,
2fmt= "d",linewidths= 0.3,
3cmap= "RdBu_r")
4#可以看到每个小方格之产生了间隙
linecolor :控制分割线的颜色
1sns.heatmap(data=data,annot= True,
2fmt= "d",linewidths= 0.3,
3linecolor= "grey",cmap= "RdBu_r")
4#原来的白色间隙变成了灰色间隙
cbar_kws :关于颜色带的设置
1sns.heatmap(data=data,annot= True,
2fmt= "d",cmap= "RdBu_r",
3cbar_kws={ "orientation": "horizontal"})
4#横向显示颜色帮
mask :传入布尔型矩阵,若为矩阵内为True,则热力图相应的位置的数据将会被屏蔽掉(常用在绘制相关系数矩阵图)
1importnumpy asnp
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
15withsns.axes_style( "white"):
16sns.heatmap(corr, mask=mask, vmax= 0.3,
17annot= True,cmap= "RdBu_r")
如果大家对上面的代码流程不大了解,可以把mask打印出来看看
参照mask和上面绘制的图,应该就很容易理解了,mask中为1的部分,就是要被盖掉的部分。演示到此为止,想更深入的学习可以自行查阅官方文档!返回搜狐,查看更多
责任编辑: