查看原文
其他

Python可视化matplotlib&seborn16-相关性heatmap

pythonic生物人 pythonic生物人 2022-09-11

"pythonic生物人"的第60篇分享


本文将了解到什么?

0、成品图展示1、数据准备2、seaborn.heatmap绘制correlation heatmap默认参数绘制correlation heatmapvmax设置颜色深浅 cmp参数变换colormap annot、fmt、annot_kws设置格子中文本mask设置部分数据显示
3、seaborn.clustermap绘制correlation clustermap

正文开始啦

0、成品图展示

普通相关性heatmap

聚类相关性heatmap



1、数据准备

关键一步,使用pandas的corr函数生成相关矩阵。

from string import ascii_letters
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import palettable

# 生成随机数
rs = np.random.RandomState(33)#类似np.random.seed,即每次括号中的种子33不变,每次可获得相同的随机数
d = pd.DataFrame(data=rs.normal(size=(100, 26)),#normal生成高斯分布的概率密度随机数,需要在变量rs下使用
                 columns=list(ascii_letters[26:]))

# corr函数计算相关性矩阵(correlation matrix)
dcorr = d.corr(method='pearson')#默认为'pearson'检验,可选'kendall','spearman'

简单看下原始数据集,如下:可以简单理解为一个具有26个变量(A-Z),每个变量具有100个平行的矩阵。经过corr函数变换后 ,变成26x26的方形矩阵。

2、seaborn.heatmap绘制correlation heatmap

默认参数绘制correlation heatmap

plt.figure(figsize=(11, 9),dpi=100)
sns.heatmap(data=dcorr,
           )

vmax设置颜色深浅

plt.figure(figsize=(11, 9),dpi=100)
sns.heatmap(data=dcorr,
            vmax=0.3, #上图颜色太深,不美观,让整体颜色变浅点           
           )

cmp参数变换colormap

关于colormap可参考:

plt.figure(figsize=(11, 9),dpi=100)
sns.heatmap(data=dcorr,
            vmax=0.3, 
            cmap=palettable.cmocean.diverging.Curl_10.mpl_colors, #换个colormap          
           )

annot、fmt、annot_kws设置格子中文本

plt.figure(figsize=(11, 9),dpi=100)
sns.heatmap(data=dcorr,
            vmax=0.3, 
            cmap=palettable.cmocean.diverging.Curl_10.mpl_colors,
            annot=True,#图中数字文本显示
            fmt=".2f",#格式化输出图中数字,即保留小数位数等
            annot_kws={'size':8,'weight':'normal', 'color':'#253D24'},#数字属性设置,例如字号、磅值、颜色            
           )

mask设置部分数据显示

plt.figure(figsize=(11, 9),dpi=100)
sns.heatmap(data=dcorr,
            vmax=0.3, 
            cmap=palettable.cmocean.diverging.Curl_10.mpl_colors,
            annot=True,
            fmt=".2f",
            annot_kws={'size':8,'weight':'normal', 'color':'#253D24'},
            mask=np.triu(np.ones_like(dcorr,dtype=np.bool))#显示对脚线下面部分图
           )

square、linewidths、 cbar_kws设置方格外框、图例设置

plt.figure(figsize=(11, 9),dpi=100)
sns.heatmap(data=dcorr,
            vmax=0.3, 
            cmap=palettable.cmocean.diverging.Curl_10.mpl_colors,
            annot=True,
            fmt=".2f",
            annot_kws={'size':8,'weight':'normal', 'color':'#253D24'},
            mask=np.triu(np.ones_like(dcorr,dtype=np.bool)),#显示对脚线下面部分图
            square=True, linewidths=.5,#每个方格外框显示,外框宽度设置
            cbar_kws={"shrink": .5}
           )

3、seaborn.clustermap绘制correlation clustermap

plt.figure(figsize=(11, 9),dpi=100)
sns.clustermap(data=dcorr,
               vmax=0.3,
               cmap=palettable.cmocean.diverging.Curl_10.mpl_colors,
               linewidths=.75,       
                              
              )

注意左上方分类条

row_c = dict(zip(list(ascii_letters[26:]), plt.get_cmap('RdPu')(np.linspace(0, 1, 26))))
index_c = dict(zip(list(ascii_letters[26:]), plt.get_cmap('RdPu')(np.linspace(0, 1, 26))))
sns.set(style="ticks")
plt.figure(figsize=(13, 13))
sns.clustermap(data=dcorr,
               vmax=0.3,
               cmap=palettable.cmocean.diverging.Curl_10.mpl_colors,
               linewidths=.75,
               row_colors=pd.Series(dcorr.columns.get_level_values(None), index=dcorr.columns).map(row_c), #行方向聚类用颜色区分不同类 
               col_colors=pd.Series(dcorr.columns.get_level_values(None), index=dcorr.columns).map(index_c),   
               dendrogram_ratio=0.15,# 图放大缩小
              )

相关性热图(correlation heatmap& correlation clustermap)是heatmap和clustermap的变种,更多参数设置请戳:

原创不易"点赞"、"在看"鼓励下呗

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存