matplotlib & seaborn相关性热图

这篇博客介绍了如何利用Python的pandas和seaborn库来生成数据的相关性矩阵,并通过seaborn的heatmap函数绘制相关性热力图。同时,针对seaborn显示中文时遇到的字体问题,提供了清除matplotlib缓存的解决方案,确保能正确显示中文列名。
摘要由CSDN通过智能技术生成

 

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'

 

2、seaborn.heatmap绘制correlation heatmap

vmax设置颜色的阈值,根据数据范围确定

data必须是数值型

cmap colormap样式

annot 图片上显示数字

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

3、colormap可视化

每种Colormap中颜色是什么样子的?请看下图:

图片

取colormap

import matplotlib.pyplot as plt
from matplotlib import cm

plt.cm.get_cmap('Accent')

4.seaborn显示中文

列名是中文的时候报Font Family ['Microsoft YaHei'] not found这个错,不管是修改matplotlibrc文件还是拷贝字体文件到/home/xx/anaconda3/lib/python3.7/site-packages/matplotlib/mpl-data/fonts路径下都不管用。

后来发现应该是缓存的问题

cd /home/xx/.cache/matplotlib
ls
fontlist-v310.json  tex.cache

有一个字体列表json的文件: fontlist-v310.json,这个文件里保存这绝对路径
    {
      "fname": "/usr/share/fonts/truetype/noto/NotoSerifDevanagari-Regular.ttf", //这个是绝对路径
      "name": "Noto Serif Devanagari",
      "style": "normal",
      "variant": "normal",
      "weight": 400,
      "stretch": "normal",
      "size": "scalable",
      "__class__": "FontEntry"
    }

这个文件里没有Microsoft YaHei的配置,把缓存清掉之后,它会读/matplotlib/mpl-data/fonts重新生成,再运行就可以了

rm -rf /home/xx/.cache/matplotlib

 

参考:

1.https://zhuanlan.zhihu.com/p/170572450 seaborn代码

2.https://mp.weixin.qq.com/s?__biz=MzUwOTg0MjczNw==&mid=2247484329&idx=1&sn=20ec36f7f5077221671b32d47c3412c8&chksm=f90d47f7ce7acee11449c5584a11a020cf05c27f7a60b9357bbdc35181cc7e8420c594d09fc5&scene=158#rd  colormap

3. https://blog.csdn.net/wtySama/article/details/105316240 seaborn中文字体显示 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值