【Python】箱图boxplot--统计数据、观察数据利器

本文系统详解利用python中seaborn.boxplot绘制箱图boxplot。
seaborn.boxplot是matplotlib.pyplot.boxplot的封装版,
更个性化的设置请研究matplotlib.pyplot.boxplot

本文将了解到什么?

 
 
1、数据集准备及箱图简介
2、seaborn.boxplot箱图外观设置
默认参数绘制箱图
  箱图异常值属性设置 
  异常值关闭显示
  异常值marker大小设置
  异常值marker形状、填充色、轮廓设置
箱图上下横线属性设置 
  上下横线关闭
  上下横线颜色、线型、线宽等设置
箱图上下须线属性设置
箱图箱子设置
  箱子设置缺口
  箱子不填充颜色 
  箱子外框、内部填充色 
箱图中位数线属性设置 
箱图均值属性设置 
  均值使用点显示、设置点形状、填充色
  均值使用线显示 、线型、颜色设置
箱图中所有线属性设置 




3、seaborn.boxplot分组箱图
分组绘图(方法一)
分组绘图(方法二)
箱子颜色设置 
  设置箱子颜色
  设置箱子颜色饱和度
箱子间距设置 
每个小组再按子组绘图 
按顺序绘制箱图

正文开始啦

a5526590bfd48b0d7ca479926fe41a88.png

一个箱图的主要组成原件

线图用来展现数据的分布,能直观的展示数据的关键指标(如下四分位数、上四分位数、中位数、最大值、最小值、离散点/异常值点);箱线图可直观展示不同组数据的差异;下面详细介绍python中matplotlib及seaborn库绘制箱图。

1、数据集准备及箱图简介

还是使用鸢尾花数据集iris,iris详细介绍请戳:Python可视化|matplotlib10-绘制散点图scatter

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from pandas import Series,DataFrame
import seaborn as sns
import palettable
from sklearn import datasets 


plt.rcParams['font.sans-serif']=['SimHei']  # 用于显示中文
plt.rcParams['axes.unicode_minus'] = False  # 用于显示中文

iris=datasets.load_iris()
x, y = iris.data, iris.target
pd_iris = pd.DataFrame(np.hstack((x, y.reshape(150, 1))),columns=['sepal length(cm)','sepal width(cm)','petal length(cm)','petal width(cm)','class'] )

查看数据集样子? 7e1edbefaddc34d4c71a605a7efa206f.pngpd_iris["sepal width(cm)"]简单统计,后文主要使用该列数据集绘图

pd_iris["sepal width(cm)"].describe()#以上各个值其实都可以使用describe函数查看

count    150.000000
mean       3.054000
std        0.433594
min        2.000000
25%        2.800000(下四分位数,25% 的数据小于等于此值。)
50%        3.000000(中位数,50% 的数据小于等于此值。)
75%        3.300000(上四分位数,75% 的数据小于等于此值。)
max        4.400000
Name: sepal width(cm), dtype: float64

上面注释部分很好的解释了下面箱图中四分位数的含义  2dd51deaf2d31abeb786d5e01c0cbb66.png


2、seaborn.boxplot箱图外观设置

  • 默认参数绘制箱图

plt.figure(dpi=100)
sns.boxplot(y=pd_iris["sepal width(cm)"],#传入一组数据
            orient='v'#箱子垂直显示,默认为'h'水平显示
           )
plt.show()
0da8d02b1e909c8e76a95756348ed947.png
  • 箱图异常值属性设置

异常值关闭显示

plt.figure(dpi=100)
sns.boxplot(y=pd_iris["sepal width(cm)"],
            showfliers=False,#异常值关闭显示
           )
plt.show()
a37084debd778a97eb2294b3b8849afb.png

异常值marker大小设置

plt.figure(dpi=100)
sns.boxplot(y=pd_iris["sepal width(cm)"],
            orient='v',
            fliersize=15,#设置离散值marker大小,默认为5
           )
plt.show()
c5f484288e25c05356c6bb9752075623.png

异常值marker形状、填充色、轮廓设置

plt.figure(dpi=100)
sns.boxplot(y=pd_iris["sepal width(cm)"],
            orient='v',
            flierprops = {'marker':'o',#异常值形状
                          'markerfacecolor':'red',#形状填充色
                          'color':'black',#形状外廓颜色
                         },
           )
plt.show()
45c40b75c519250867ec6c7e30f35f59.png
  • 箱图上下横线属性设置

上下横线关闭

plt.figure(dpi=100)
sns.boxplot(y=pd_iris["sepal width(cm)"],
            showcaps=False,#上下横线关闭
           )
plt.show()
5f064842aec27370a4b3f4029e19ed43.png

上下横线颜色、线型、线宽等设置

plt.figure(dpi=100)
sns.boxplot(y=pd_iris["sepal width(cm)"],
            capprops={'linestyle':'--','color':'red'},#设置上下横线属性
           )
plt.show()
f48f80c79523f455722bcb05013926f0.png
  • 箱图上下须线属性设置

plt.figure(dpi=100)
sns.boxplot(y=pd_iris["sepal width(cm)"],
            whiskerprops={'linestyle':'--','color':'red'},#设置上下须属性
           )
plt.show()
580816e176363b3c6d6609f2bad79da8.png
  • 箱图箱子设置

箱子设置缺口

plt.figure(dpi=100)
sns.boxplot(y=pd_iris["sepal width(cm)"],
            orient='v',
            notch=True,#箱子设置缺口
           )
plt.show()
7904c61002176bbe969bc74bed233fa5.png

箱子不填充颜色

plt.figure(dpi=100)
sns.boxplot(y=pd_iris["sepal width(cm)"],
            orient='v',
            color='white',#箱子不填充
           )
plt.show()
7dbe39a26426c19675b2df39d285511e.png

箱子外框、内部填充色

plt.figure(dpi=100)
sns.boxplot(y=pd_iris["sepal width(cm)"],
           boxprops = {'color':'red',#箱子外框
           'facecolor':'pink'#箱子填充色
           },#设置箱子属性
           )
plt.show()
a2f007a0d01386af9ca9258275f27ba1.png
  • 箱图中位数线属性设置

plt.figure(dpi=100)
sns.boxplot(y=pd_iris["sepal width(cm)"],
           medianprops = {'linestyle':'--','color':'red'},#设置中位数线线型及颜色
           )
plt.show()
d3a9cd4e00c0a8955d88e7f5da1b9818.png
  • **箱图均值属性设置 **

均值使用点显示、设置点形状、填充色

plt.figure(dpi=100)
sns.boxplot(y=pd_iris["sepal width(cm)"],
            showmeans=True,#箱图显示均值,
            meanprops = {'marker':'D','markerfacecolor':'red'},#设置均值属性
           )
plt.show()
e21f5e6ba05eb7e2f842ce033aebcead.png

均值使用线显示 、线型、颜色设置

plt.figure(dpi=100)
sns.boxplot(y=pd_iris["sepal width(cm)"],
            showmeans=True,#箱图显示均值,
            meanline=True,#显示均值线
            meanprops = {'linestyle':'--','color':'red'},#设置均值线属性
           )
plt.show()
5e271605fa7fcae21cbccf4c92efc732.png
  • 箱图中所有线属性设置

plt.figure(dpi=100)
sns.boxplot(y=pd_iris["sepal width(cm)"],
            orient='v',
            linewidth=8#设置箱子等线的宽度
           )
plt.show()
331a79e123042e8ee4acfd241f584421.png

3、seaborn.boxplot分组箱图

  • 分组绘图(方法一)

plt.figure(dpi=100)
class_name=[iris.target_names[0] if i==0.0 else iris.target_names[1] if i==1.0 else iris.target_names[2] for i in pd_iris['class']]
sns.boxplot(x=class_name,#按照pd_iris["sepal width(cm)"]分组,即按照每种鸢尾花('setosa', 'versicolor', 'virginica')分组绘图
            y=pd_iris["sepal width(cm)"],#绘图数据
            orient='v'
           )
plt.show()
7be25168cc4857cabcd87784def97cfb.png
  • 分组绘图(方法二)

plt.figure(dpi=100)
sns.boxplot(x='class',
            y='sepal width(cm)',
            data=pd_iris,#data的作用就是x,y每次不需要输入pd_iris
            orient='v'
           )
plt.show()
6858de75c375686411580be9b5f9fb4e.png
  • 箱子颜色设置

设置箱子颜色

import palettable
plt.figure(dpi=100)
sns.boxplot(x='class',
            y='sepal width(cm)',
            data=pd_iris,
            orient='v',
            palette=palettable.tableau.TrafficLight_9.mpl_colors,#设置每个箱子颜色
           )
plt.show()
213ff02e75218f8c87fa049194b27c20.png

设置箱子颜色饱和度

import palettable
plt.figure(dpi=100)
sns.boxplot(x='class',
            y='sepal width(cm)',
            data=pd_iris,
            orient='v',
            palette=palettable.tableau.TrafficLight_9.mpl_colors,
            saturation=0.3,#设置颜色饱和度
           )
plt.show()
40114c36123ba05c2c0af5b306120555.png
  • 箱子间距设置

import palettable
plt.figure(dpi=100)
sns.boxplot(x='class',
            y='sepal width(cm)',
            data=pd_iris,
            orient='v',
            palette=palettable.tableau.TrafficLight_9.mpl_colors,
            saturation=0.3,#设置颜色饱和度
            width=1.0,#设置箱子之间距离,为1时,每个箱子之间距离为0
           )
plt.show()
5377b47bec3f563e1225b92856868c52.png
  • 每个小组再按子组绘图

plt.figure(dpi=100)
class_name=[iris.target_names[0] if i==0.0 else iris.target_names[1] if i==1.0 else iris.target_names[2] for i in pd_iris['class']]
sns.boxplot(x=class_name,
            y=pd_iris['sepal width(cm)'],
            hue=pd_iris['petal width(cm)'],#每类按照子类分组:上图三类再按照'sepal width(cm)'分组绘图
            orient='v'
           )
plt.show()
e48839cd3e6c3aa94d3796f0492ce6eb.png
  • 按顺序绘制箱图

plt.figure(dpi=100)
class_name=[iris.target_names[0] if i==0.0 else iris.target_names[1] if i==1.0 else iris.target_names[2] for i in pd_iris['class']]
sns.boxplot(x=class_name,
            y=pd_iris["sepal width(cm)"],
            hue=pd_iris['petal width(cm)'],
            order=["virginica", "versicolor", "setosa"],#设置箱子的显示顺序
            hue_order=sorted(list(pd_iris['petal width(cm)'].unique())),#设置每个子类中箱子的显示顺序,此处设置从小到大排序
            orient='v'
           )
plt.show()
5df9aa8c516a78901795f1e6bf3d549c.png

4、参考资料

 
 
 
 
 
 
 
 
 
 
往期精彩回顾




适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载黄海广老师《机器学习课程》视频课黄海广老师《机器学习课程》711页完整版课件

本站qq群955171419,加入微信群请扫码:

86ae1f0363501c12ad12cf4a75b8dd29.png

  • 13
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值