Python数据可是化seaborn(二) -- 直方图与密度图

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

distplot()
kdeplot()
rugplot()

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn  as sns
%matplotlib inline


#设置风格、尺度
sns.set_style("darkgrid") 
sns.set_context("paper")


#屏蔽警告
import warnings
warnings.filterwarnings('ignore')
1.直方图 - distplot()
rs = np.random.RandomState(10)  # 设定随机数种子
s = pd.Series(rs.randn(100)*100)
sns.distplot(s, bins=10, hist=True, kde=False, norm_hist=False,rug=True, vertical=False, color='y', label='distplot', axlabel='x')

plt.legend()

'''
bins : 箱数
hist、ked:是否显示箱、密度曲线
norm_hist:直方图是否按照密度来显示
rug:是否显示数据分布情况
vertical:是否水平显示
color:设置颜色
label:图例
axlabel:x轴标注
'''

在这里插入图片描述

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

在这里插入图片描述

2.密度图 - kdeplot()

密度估计的步骤:

  1. 每一个观测附近用一个正态分布曲线近似
  2. 叠加所有观测的正态分布曲线
  3. 归一化

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: {‘scott’|‘silverman’|标量|一对标量} 确定核的大小,近似理解为拟合程度,bw越大,曲线越平缓。
gridsize:int, 网格中的离散点数
cumulative :是否绘制累积分布
cbar:参数若为True,则会添加一个颜色条(颜色条在双变量kde图像中才有)

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

sns.kdeplot(s,
             shade=False, # 是否填充
             color='r',  # 设置颜色
             vertical=False # 设置是否水平
           )

sns.kdeplot(s, color='g', bw=5, label='bw: 5', linestyle='-', linewidth=1.2, alpha=0.5)

sns.kdeplot(s, color='b', bw=20, label='bw: 20', linestyle='--', linewidth=1.2, alpha=0.5)

# bw: 控制拟合的程度,类似直方图的箱数,值越大,越平滑

sns.rugplot(s, height=0.1, color='k', alpha=0.5)  # 数据频率分布图

在这里插入图片描述

sns.kdeplot(s,color='k',cumulative=True,
            linestyle = '--',linewidth = 2)
plt.show()

在这里插入图片描述

两个样本数据密度分布图
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_r', # 设置颜色盘
            shade_lowest=False,  # 最外围颜色是否显示
            n_levels=10  # 曲线个数(如果非常多,则会越平滑)
           )

# 两个维度数据生成曲线密度图,以颜色作为密度衰减显示

sns.rugplot(df['A'], color='g', axis='x', alpha=0.5)
sns.rugplot(df['B'], color='b', axis='y', alpha=0.5)

plt.scatter(df['A'],df['B'],s=5, alpha=0.5, color='k')  # 散点图

在这里插入图片描述

多个密度图
rs1 = np.random.RandomState(2)
rs2 = np.random.RandomState(5)
df1 = pd.DataFrame(rs.randn(100,2)+2, columns=['A','B'])
df2 = pd.DataFrame(rs.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)

在这里插入图片描述

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jepson2017

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值