天天看点

python可视化进阶---seaborn1.3 分布数据可视化 - 直方图与密度图 displot() / kdeplot()/ rugplot()

一、分布数据可视化 - 直方图与密度图

displot() / kdeplot()/ rugplot()

加载模块,设置风格,尺度

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
 
#设置风格,尺度
sns.set_style('darkgrid')
sns.set_context('paper')
 
#不发出警告
import warnings
warnings.filterwarnings('ignore')      

1.直方图 - distplot()

示例1:

rs = np.random.RandomState(10) #设定随机数种子
s = pd.Series(rs.randn(100) * 100)
sns.distplot(s, bins = 10, hist = True, kde = True, norm_hist = False,
            rug = True, vertical = True,
            color = 'b', label = 'distplot', axlabel = 'x')
plt.legend()      

#bins ---> 箱数

#hist、ked ---> 是否显示箱/密度曲线

#norm_hist ---> 直方图是否按照密度来显示

#rug ---> 是否显示数据分布情况

#vertical ---> 是否水平显示

#color ---> 设置颜色

#label ---> 图例

#axlabel ---> x轴标注

python可视化进阶---seaborn1.3 分布数据可视化 - 直方图与密度图 displot() / kdeplot()/ rugplot()

图1. 直方图

示例2:

sns.distplot(s, rug = True,
             rug_kws = {'color':'y'},
             #设置数据频率分布颜色
             kde_kws = {'color':'k', 'lw':1, 'label':'KDE', 'linestyle':'--'},
             #设置密度曲线颜色、线宽、标注、 线形
             hist_kws = {'histtype':'stepfilled', 'linewidth':1, 'alpha':1, 'color':'g'})
             # 设置箱子的风格、线宽、透明度、颜色
             # 风格包括:'bar'、'barstacked'、'step'、'stepfilled'      

python可视化进阶---seaborn1.3 分布数据可视化 - 直方图与密度图 displot() / kdeplot()/ rugplot()

图2. 直方图

2.密度图 - kdeplot()

2.1 单个样本数据密度分布图

sns.kdeplot(s,
            shade = False, #是否填充
            color = 'r', #设置颜色
            vertical = False) #设置是否水平)
 
sns.kdeplot(s, bw = 1, label = 'bw : 0.2',
            linestyle = '--', linewidth = 1.2, alpha = 0.5)
sns.kdeplot(s, bw =20, label = 'bw : 2',
            linestyle = '--', linewidth = 1.2, alpha = 0.5)
#bw --> 控制拟合的程度,类似直方图的箱数
#数据频率分布
sns.rugplot(s, height = 0.1, color = 'r', alpha = 0.5)      

python可视化进阶---seaborn1.3 分布数据可视化 - 直方图与密度图 displot() / kdeplot()/ rugplot()

图3. 单个样本数据密度分布图

2.2 两个样本的数据密度分布图

rs = np.random.RandomState(2) #设定随机数种子
df = pd.DataFrame(rs.randn(100,2),
                  columns = ['A', 'B'])
 
#两个维度数据生成曲线密度图,以颜色作为密度的衰减显示
sns.kdeplot(df['A'],df['B'],
            cbar = True,          #是否显示颜色的图例
            shade = True,         #是否填充
            cmap = 'Reds',        #设置调色盘
            shade_lowest = False, #最外围颜色是否显示
            n_levels = 50         #曲线个数(如果非常多,则会越平滑)
            )
 
#注意设置x,y轴
plt.scatter(df['A'],df['B'],s = 5, alpha = 0.5, color = 'k')
sns.rugplot(df['A'], color = 'g', axis = 'x', alpha = 0.5)
sns.rugplot(df['B'], color = 'r', axis = 'y', alpha = 0.5)      
python可视化进阶---seaborn1.3 分布数据可视化 - 直方图与密度图 displot() / kdeplot()/ rugplot()

图4. 两个样本数据的密度分布图

2.3 多个样本的密度图

#多个密度图
#创建数据
rs1 = np.random.RandomState(2)
rs2 = np.random.RandomState(5)
df1 = pd.DataFrame(rs1.randn(100,2)+2, columns = ['A','B'])
df2 = pd.DataFrame(rs2.randn(100,2)-2, columns = ['A','B'])
#创建图表
sns.kdeplot(df1['A'],df1['B'],cmap = 'Greens',
            shade = True, shade_lowest = False)
sns.kdeplot(df2['A'],df2['B'],cmap = 'Blues',
            shade = True, shade_lowest = False)      
python可视化进阶---seaborn1.3 分布数据可视化 - 直方图与密度图 displot() / kdeplot()/ rugplot()

3.rugplot()

这个函数就是显示数据分布情况,具体使用参见上面代码