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代码
3. https://blog.csdn.net/wtySama/article/details/105316240 seaborn中文字体显示