这篇文章是Python可视化seaborn系列的第二篇文章,本文将详解seaborn如何探索数据的分布。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
% matplotlib inline
sns.set(context='notebook',font='simhei',style='whitegrid')
# 设置风格尺度和显示中文
import warnings
warnings.filterwarnings('ignore') # 不发出警告
单变量
直方图 displot
seaborn.distplot(a, bins=None, hist=True, kde=True, rug=False, fit=None, hist_kws=None, kde_kws=None, rug_kws=None, fit_kws=None, color=None, vertical=False, norm_hist=False, axlabel=None, label=None, ax=None)
- bins → 箱数
- hist、ked、rug → bool,是否显示箱/密度曲线/数据分布
- norm_hist → 直方图是否按照密度来显示,如果为False,显示计数
- {hist,kde,rug,fit} _kws:字典,对应部分的各种参数。
- vertical → 是否水平显示
- fit → 可结合scipy库在图像上做拟合
- label → 图例
- axlabel → x轴标注
# 直方图
from scipy.stats import norm #使用直方图和最大似然高斯分布拟合绘制分布
rs = np.random.RandomState(50) # 设置随机数种子
s = pd.Series(rs.randn(100)*100)
plt.figure(figsize=(8,4))
sns.distplot(s, bins=10, hist=True, kde=False, norm_hist=False,
rug=True, vertical=False,label='distplot',
axlabel='x轴',hist_kws={
'color':'y','edgecolor':'k'},
fit=norm)
# 用标准正态分布拟合
plt.legend()
plt.grid(linestyle='--')
plt.show()
plt.figure(figsize=(8,4))
sns.distplot(s,rug = True,
rug_kws = {
'color':'b'} ,
# 设置数据频率分布颜色
kde_kws={
"color": "k", "lw": 2, "label": "KDE",'linestyle':'--'},
# 设置密度曲线颜色,线宽,标注、线形
hist_kws={
"histtype": "step", "linewidth": 2,"alpha": 1, "color": "g"})
# 设置箱子的风格、线宽、透明度、颜色
# 风格包括:'bar', 'barstacked', 'step', 'stepfilled'
plt.show()
核密度估计图 kdeplot
核密度估计的步骤:
- 每一个观测附近用一个正态分布曲线近似
- 叠加所有观测的正态分布曲线
- 归一化
seaborn.kdeplot(data,data2 = None,shade = False,vertical = False,kernel ='gau',bw ='scott',gridsize = 100,cut = 3,clip = None,legend = True,cumulative = False,shade_lowest = True,cbar = False,cbar_ax =无,cbar_kws =无,ax =无, kwargs )
- shade: 如果为True,则用颜色填充KDE曲线下方的区域(或者在数据为双变量时用颜色填充的轮廓)
- kernel: {‘gau’|‘cos’|‘biw’|‘epa’|‘tri’|‘triw’} 用于拟合的核,双变量值能用高斯核(gau)
- bw: {'sco