如何使用python数据可视化Seaborn画热力图(python,seaborn,开发技术)

时间:2024-05-02 07:46:17 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

1.引言

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

如何使用python数据可视化Seaborn画热力图

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

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

2. 栗子

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

importpandasaspdimportmatplotlib.pyplotaspltimportseabornassbimportnumpyasnp

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

数据集样例如下所示:

  • 如何使用python数据可视化Seaborn画热力图

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

3. 数据预处理

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

代码如下:

#readdatasetdf=pd.read_csv('data/cereal.csv')#getcorrelationsdf_corr=df.corr()#13X13print(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]

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

#irrelevantfieldsfields=['rating','shelf','cups','weight']#droprowsdf_corr.drop(fields,inplace=True)#9X13#dropcolsdf_corr.drop(fields,axis=1,inplace=True)#9X9print(df_corr)

得到结果如下:

如何使用python数据可视化Seaborn画热力图

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

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))

结果如下:

如何使用python数据可视化Seaborn画热力图

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

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

此时的运行结果如下:

如何使用python数据可视化Seaborn画热力图

5. 添加数值

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

我们当然可以在绘制的时候将其进行过滤。即分别将和上述圆圈对应的maskdf_corr过滤掉,

代码如下:

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

同时我们可以设置heatmap相应的参数,让其显示对应的数值,

完整代码如下:

deftest2():#readdatasetdf=pd.read_csv('data/cereal.csv')#getcorrelationsdf_corr=df.corr()#13X13#irrelevantfieldsfields=['rating','shelf','cups','weight']df_corr.drop(fields,inplace=True)#9X13#dropcolsdf_corr.drop(fields,axis=1,inplace=True)#9X9mask=np.triu(np.ones_like(df_corr,dtype=np.bool))#adjustmaskanddfmask=mask[1:,:-1]corr=df_corr.iloc[1:,:-1].copy()#plotheatmapsb.heatmap(corr,mask=mask,annot=True,fmt=".2f",cmap='Blues',vmin=-1,vmax=1,cbar_kws={"shrink":.8})#yticksplt.yticks(rotation=0)plt.show()

运行结果如下:

如何使用python数据可视化Seaborn画热力图

6. 调色板优化

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

如何使用python数据可视化Seaborn画热力图

在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,SaturationLightness。这里我们查阅网站来选择我们接下来设置的调色板的颜色。

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

完整代码如下:

deftest3():#readdatasetdf=pd.read_csv('data/cereal.csv')#getcorrelationsdf_corr=df.corr()#13X13#irrelevantfieldsfields=['rating','shelf','cups','weight']df_corr.drop(fields,inplace=True)#9X13#dropcolsdf_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))#adjustmaskanddfmask=mask[1:,:-1]corr=df_corr.iloc[1:,:-1].copy()#colormapcmap=sb.diverging_palette(0,230,90,60,as_cmap=True)#plotheatmapsb.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()foriincorr.index]xticks=[i.upper()foriincorr.columns]plt.yticks(plt.yticks()[0],labels=yticks,rotation=0)plt.xticks(plt.xticks()[0],labels=xticks)#titletitle='CORRELATIONMATRIX\nSAMPLEDCEREALSCOMPOSITION\n'plt.title(title,loc='left',fontsize=18)plt.show()

运行结果如下:

如何使用python数据可视化Seaborn画热力图

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

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:如何使用python数据可视化Seaborn画热力图的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Java图形化界面编程下一篇:

13 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18