超详细Seaborn绘图 ——(二)boxplot boxenplot

article/2025/9/15 4:58:44

箱形图(Box-plot)又称为盒须图、盒式图或箱线图,是一种用作显示一组数据分散情况资料的统计图。
它主要用于反映原始数据分布的特征,还可以进行多组数据分布特征的比较。箱形图最大的优点就是不受异常值的影响(异常值也称为离群值),可以以一种相对稳定的方式描述数据的离散分布情况。

目录

      • 一、基础概念
      • 二、boxplot
        • (一)语法
        • (二)参数详解
        • (三)实例
      • 三、boxenplot
        • (一)语法
        • (二)参数详解
        • (三)实例

一、基础概念

一个boxplot主要包含六个数据节点,将一组数据从大到小排列,分别计算出他的上边缘(上限)上四分位数Q3中位数下四分位数Q1下边缘(下限),还有一个异常值
在这里插入图片描述

举例来说:
对于这样一个箱线图
在这里插入图片描述

  • 中位数=8.5
    中位数,即二分之一分位数。所以计算的方法就是将一组数据(此处中位数,特别指是从大到小排列的有序序列)按从小到大的顺序,取中间这个数。
    如果原始序列长度n是奇数,那么中位数所在位置是(n+1)/2;如果原始序列长度n是偶数,那么中位数所在位置是n/2,n/2+1,中位数的值等于这两个位置的数的算数平均数

  • 上四分位数Q3=9
    确定四分位数的位置。虽然具体的计算目前有3*(n+1)/4(n-1)/4两种,但一般使用3*(n+1)/4

  • 下四分位数Q1=7
    这个下四分位数所在位置计算方法同上。不过是(n+1)/4

  • 四分位间距IQR(ΔQ)=2
    四分位间距=Q3-Q1

  • 上限=10
    上限是非异常范围内的最大值。

  • 下限=5
    下限限是非异常范围内的最小值。

  • 中位数(Q2)=8.5
    中位数常用于度量数据的中心。一半观测值小于等于该值,而另一半则大于等于该值。

  • 平均数=8
    平均数就不用多说了

  • 异常值
    规定大于上四分位数1.5倍四分位数差 的值,或者小于下四分位数1.5倍四分位数差的值,划为异常值


箱线图的作用:

1.直观明了地识别数据批中的异常值
其实箱线图判断异常值的标准以四分位数和四分位距为基础,四分位数具有一定的耐抗性,多达25%的数据可以变得任意远而不会很大地扰动四分位数,所以异常值不会影响箱形图的数据形状,箱线图识别异常值的结果比较客观。由此可见,箱线图在识别异常值方面有一定的优越性。

2.利用箱线图判断数据批的偏态和尾重
对于标准正态分布的样本,只有极少值为异常值。异常值越多说明尾部越重,自由度越小(即自由变动的量的个数);
而偏态表示偏离程度,异常值集中在较小值一侧,则分布呈左偏态;异常值集中在较大值一侧,则分布呈右偏态。

3.利用箱线图比较几批数据的形状
同一数轴上,几批数据的箱线图并行排列,几批数据的中位数、尾长、异常值、分布区间等形状信息便昭然若揭。如上图,可直观得看出第三季度各分公司的销售额大体都在下降。
但箱形图也有他的局限性,比如:不能精确地衡量数据分布的偏态和尾重程度;对于批量比较大的数据,反映的信息更加模糊以及用中位数代表总体评价水平有一定的局限性。


二、boxplot

(一)语法

seaborn.boxplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, orient=None, color=None, palette=None, saturation=0.75, width=0.8, dodge=True, fliersize=5, linewidth=None, whis=1.5, notch=False, ax=None, **kwargs)

输入数据可以通过多种格式传入,包括:

  • 格式为列表,numpy 数组或 pandas Series 对象的数据向量可以直接传递给x,y和hue参数。
  • 对于长格式的 DataFrame,x,y,和hue参数会决定如何绘制数据。
  • 对于宽格式的 DataFrame,每一列数值列都会被绘制。
  • 一个数组或向量的列表。

(二)参数详解

  • x, y, hue:数据或向量数据中的变量名称
    用于绘制长格式数据的输入。

  • data:DataFrame,数组,数组列表
    用于绘图的数据集。如果x和y都缺失,那么数据将被视为宽格式。否则数据被视为长格式。

  • order, hue_order:字符串列表
    控制分类变量(对应的条形图)的绘制顺序,若缺失则从数据中推断分类变量的顺序。

  • orient:“v”或“h”
    控制绘图的方向(垂直或水平)。这通常是从输入变量的 dtype 推断出来的,但是当“分类”变量为数值型或绘制宽格式数据时可用于指定绘图的方向。

  • colormatplotlib颜色
    所有元素的颜色,或渐变调色板的种子颜色。

  • palette:调色板名称,列表或字典
    用于hue变量的不同级别的颜色。可以从color_palette()得到一些解释,或者将色调级别映射到matplotlib颜色的字典。

  • saturation:float
    控制用于绘制颜色的原始饱和度的比例。通常大幅填充在轻微不饱和的颜色下看起来更好,如果您希望绘图颜色与输入颜色规格完美匹配可将其设置为1。

  • width:float
    不使用色调嵌套时完整元素的宽度,或主要分组变量一个级别的所有元素的宽度。

  • dodge:bool
    使用色调嵌套时,元素是否应沿分类轴移动。

  • fliersize:float
    用于表示异常值观察的标记的大小。

  • linewidth:float
    构图元素的灰线宽度。

  • whis:float
    控制在超过高低四分位数时 IQR (四分位间距)的比例,因此需要延长绘制的触须线段。超出此范围的点将被识别为异常值。

  • notch:boolean
    是否使矩形框“凹陷”以指示中位数的置信区间。还可以通过plt.boxplot的一些参数来控制

  • ax:matplotlib轴
    绘图时使用的 Axes 轴对象,否则使用当前 Axes 轴对象

  • kwargs:键值映射
    其他在绘图时传给plt.boxplot的参数


(三)实例

先简单地画一个boxplot

import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import pandas as pd
%matplotlib inline# 显示正负号与中文不显示问题
plt.rcParams['axes.unicode_minus'] = False
sns.set_style('darkgrid', {'font.sans-serif':['SimHei', 'Arial']})# 去除部分warning
import warnings
warnings.filterwarnings('ignore')plt.figure(dpi=150)
L = [3,2,1,0,4]
sns.boxplot(L)

在这里插入图片描述

s = pd.Series(L)print('平均数:',s.median())
print('')
print('下四分位数:',s.quantile(0.25))
print('')
print('中位数:',s.quantile(0.5))
print('')
print('上四分位数:',s.quantile(0.75))

在这里插入图片描述


导入tips数据集进行后续的操作

plt.figure(dpi=150)
tips = sns.load_dataset('tips')
sns.boxplot(x='day',y='tip',data=tips)

在这里插入图片描述


根据 2 个分类变量嵌套分组绘制一个箱型图

plt.figure(dpi=150)
tips = sns.load_dataset('tips')
sns.boxplot(x='day',y='tip',hue='sex',data=tips)

在这里插入图片描述


通过显式传入参数指定顺序控制箱型图的显示顺序

plt.figure(dpi=150)
tips = sns.load_dataset('tips')
sns.boxplot(x='day',y='tip',hue='sex',data=tips,order=['Sun','Sat','Fri','Thur'])

在这里插入图片描述


通过palette修改每个类别的颜色

plt.figure(dpi=150)
tips = sns.load_dataset('tips')
sns.boxplot(x='day',y='tip',hue='sex',data=tips,palette='Set2',saturation=0.4)

在这里插入图片描述


变成横向的

plt.figure(dpi=150)
tips = sns.load_dataset('tips')
sns.boxplot(y='day',x='tip',hue='sex',data=tips,palette='Set2',saturation=0.4)

在这里插入图片描述


修改异常点的大小

plt.figure(dpi=150)
tips = sns.load_dataset('tips')
sns.boxplot(x='day',y='tip',hue='sex',data=tips,fliersize=1)

在这里插入图片描述


人工改变异常值范围

默认异常值为大于Q3+1.5IQR或小于Q1-1.5IQR的值。通过whis参数可以改变IQR的因数大小进而改变异常值范围

例如:

对于以下数据集,Q1=1.25,Q3=3.25,IQR=2
因此异常值的返回为(6.25,+∞)、(-∞,-1.75)
所以L中的8为异常值

plt.figure(dpi=150)
L = [3,2,1,0,4,8]
sns.boxplot(L)s = pd.Series(L)print('平均数:',s.median())
print('')
print('下四分位数:',s.quantile(0.25))
print('')
print('中位数:',s.quantile(0.5))
print('')
print('上四分位数:',s.quantile(0.75))

在这里插入图片描述

但是如果通过whis人工修改异常值范围,例如设定whis=3
那么异常值的界限就成了Q3+3*IQRQ1-3*IQR
即(9.75,+∞)、(-∞,-4.75)

那么8就不是异常值了

plt.figure(dpi=150)
L = [3,2,1,0,4,8]
sns.boxplot(L,whis=3)

在这里插入图片描述


突出中位数的置信区间

plt.figure(dpi=150)
tips = sns.load_dataset('tips')
sns.boxplot(x='day',y='tip',hue='sex',data=tips,notch=True)

在这里插入图片描述


三、boxenplot

boxenplot是为更大的数据集绘制增强的箱型图。这种风格的绘图最初被命名为“信值图”,因为它显示了大量被定义为“置信区间”的分位数。它类似于绘制分布的非参数表示的箱形图,其中所有特征对应于实际观察的数值点。通过绘制更多分位数,它提供了有关分布形状的更多信息,特别是尾部数据的分布。

(一)语法

seaborn.boxenplot(x=None, y=None, hue=None, data=None, order=None, hue_order=None, orient=None,color=None, palette=None, saturation=0.75, width=0.8, dodge=True,k_depth='proportion',linewidth=None, scale='exponential', outlier_prop=None,ax=None, **kwargs)

(二)参数详解

作为增强版的boxplot,boxenplot很多参数和boxplot是相似的。现在就剩下不同的参数进行详解

  • k_depth:“proportion” 或 “tukey” 或 “trustworthy”
    通过增大百分比的粒度控制绘制的盒形图数目。每个参数代表利用不同的统计特性对异常值的数量做出不同的假设。

  • scale:“linear” 或 “exponential” 或 “area”
    用于控制增强箱型图宽度的方法。所有参数都会给显示效果造成影响。 “linear” 通过恒定的线性因子减小宽度,“exponential” 使用未覆盖的数据的比例调整宽度, “area” 与所覆盖的数据的百分比成比例。

  • outlier_prop:float
    被认为是异常值的数据比例。与 k_depth 结合使用以确定要绘制的百分位数。默认值为 0.007 作为异常值的比例。该参数取值应在[0,1]范围内。


(三)实例

绘制一个独立的横向增强箱型图

plt.figure(dpi=150)
tips = sns.load_dataset("tips")
sns.boxenplot(x=tips["total_bill"])

在这里插入图片描述


根据分类变量分组绘制一个纵向的增强箱型图

plt.figure(dpi=150)
tips = sns.load_dataset("tips")
sns.boxenplot(x='day',y='total_bill',data=tips)

在这里插入图片描述


根据 2 个分类变量嵌套分组绘制一个增强箱型图

plt.figure(dpi=150)
tips = sns.load_dataset("tips")
sns.boxenplot(x='day',y='total_bill',hue='smoker',data=tips)

在这里插入图片描述


改变盒形图数目

plt.figure(dpi=150)
tips = sns.load_dataset("tips")
sns.boxenplot(x='day',y='total_bill',hue='smoker',data=tips,k_depth='tukey')

在这里插入图片描述

plt.figure(dpi=150)
tips = sns.load_dataset("tips")
sns.boxenplot(x='day',y='total_bill',hue='smoker',data=tips,k_depth='trustworthy')

在这里插入图片描述


控制增强箱型图宽度

plt.figure(dpi=150)
tips = sns.load_dataset("tips")
sns.boxenplot(x='day',y='total_bill',hue='smoker',data=tips,scale='linear')

在这里插入图片描述

plt.figure(dpi=150)
tips = sns.load_dataset("tips")
sns.boxenplot(x='day',y='total_bill',hue='smoker',data=tips,scale='exponential')

在这里插入图片描述

plt.figure(dpi=150)
tips = sns.load_dataset("tips")
sns.boxenplot(x='day',y='total_bill',hue='smoker',data=tips,scale='area')

在这里插入图片描述


http://chatgpt.dhexx.cn/article/DHsaCgSO.shtml

相关文章

matplotlib之pyplot模块——绘制箱线图(盒须图)boxplot()(二)演示外观参数、返回值

当前有效matplotlib版本为:3.4.1。 概述 boxplot()函数的作用是绘制箱线图(箱线图、盒须图、箱图)。 箱线图是由一个箱体和一对箱须所组成的统计图形。箱体是由第一四分位数、中位数(第二四分位数)和第三四分位数所…

matplotlib之pyplot模块——绘制箱线图(盒须图)boxplot()(一)基本参数

当前有效matplotlib版本为:3.4.1。 概述 boxplot()函数的作用是绘制箱线图(箱线图、盒须图、箱图)。 箱形图(boxplot)又称盒须图或箱线图,是一种用来显示某一组数据分散情况的统计图,因形状如…

matplotlib.pyplot.boxplot()绘制箱型图

目录 一、matplotlib.pyplot.boxplot()语法 二、绘制箱型图 ①绘制简单箱型图 ②各个参数绘制箱型图 (1)notch参数(bool值,是否凹口的形式展现箱线图,默认值False非凹口) (2)sy…

Matlab中boxplot函数的用法

Boxplot函数: boxplot(x)函数:绘制数据X的盒须图。如果X为矩阵,则对每一列分别进行绘制。盒须图用于表现数据统计信息,由“盒”与“须”组成,“盒”中有一条直线,表示样本的中位数&a…

Matplotlib——箱线图boxplot()函数

箱线图一般用来展现数据的分布,如上下四分位值、中位数等,也可以直观地展示异常点。Matplotlib提供了boxplot()函数绘制箱线图。 import matplotlib.pyplot as plt_ plt.boxplot(range(10)) # 10个数,0-9plt.show()箱线图虽然看起来简单&a…

python绘制箱线图boxplot()

最近在处理数据时,需要使用python绘制箱线图。 1. 箱线图 箱线图(Box-plot)又称为盒式图或箱型图,是一种用来显示一组数据分散情况的统计图,它能显示一组数据的上界、下界、中位数、上下四分位数以及异常值等。 四分…

boxplot

1. 简介 箱形图,又称为盒须图、盒式图、盒状图或箱线图,是一种用作显示一组数据分散情况资料的统计图。箱形图于1977年由美国著名统计学家约翰图基(John Tukey)发明。它能显示出一组数据的最大值、最小值、中位数、上下四分位数及…

Box plot (箱线图) 解读以及Python实现

因为最近论文有信息量很大的结果需要展示,如果用常用的折线图或者柱状图很难集中且全面的展示实验结果,和老板讨论之后了解到--箱线图这种神奇的图形展示方式。边学边用~记录在这里~也给有论文写作需要的小伙伴们一个参考~ 1. 什么是箱线图? 箱形图(Box-plot)又称为盒须…

箱线图(Boxplot)也称箱须图(Box-whisker Plot)

简述: 箱线图(Boxplot)也称箱须图(Box-whisker Plot),是利用数据中的五个统计量:最小值、第一四分位数、中位数、第三四分位数与最大值来描述数据的一种方法。它也可以粗略地看出数据是否具有有…

plt.boxplot()函数绘制箱图、常用方法及含义详解

1. 箱图含义 箱图是一中用于统计数据分布的统计图,也可以粗略地看出数据是否具有对称性,分布的分散程度等信息。箱图中的信息含义如下: 最下方的横线表示最小值最上方的横线表示最大值黑色空心圆圈表示异常值黑色实心圆圈表示极端值箱子由…

mysql查询between_MySQL查询数据过滤之BETWEEN操作符简介

BETWEEN运算符是一种逻辑运算符,判断指定值是否在范围内。 BETWEEN运算符的语法: expr [NOT] BETWEEN begin_expr AND end_expr; expr 是判断值是否在 begin_expr 和 end_expr 范围的内的表达式。 如果的值 expr大于或等于(> ) begin_expr &#x…

mysql 查询正在进行的事务

SELECT * FROM information_schema.innodb_trx字段解析 innodb_trx表: trx_id:事务ID。 trx_state:事务状态,有以下几种状态:RUNNING、LOCK WAIT、ROLLING BACK 和 COMMITTING。 trx_started:事务开始时间…

MySql 查询结果列拼接

MySql 查询结果列拼接 select concat( country,‘‘, province,’’, city,‘_’, store_properties) from wxshops

mysql 查询json字段

目录 json字段查询 字段格式 ​编辑查询: 注意: eg: json字段更新 json字段作为条件判断 代码: json字段判断(json字段中有[],需要判断就可以使用) 结果 json字段查询 字段格式 查询&#xff…

mysql查询表的内容_mysql查询表内容

一,说明:表名为student 1,查询某个表里的字段 select 字段名1,字段名1 form student; 例如:查询student中的sname select sname from student; 2,查询某个表里的字段(字段下面有重复的内容),并且显示的查询…

mysql查询排名

在MySQL中,不存在类似于SQL Server或Orcal等中的rank()函数来得到排名;所以我们需要手动地写这个rank功能。 基本知识: sql语句中,使用来定义一个变量。如:ranksql语句中,使用:来给变量赋值,:r…

MySQL 多种查询方法

这里写目录标题 查询1、单表查询1.选择表中的若干列2.选择表中的若干元组3.order by子句4.聚集函数5.group by分组 2、连接查询1、等值与非等值连接查询2、自身连接3、外连接4、多表连接 3、嵌套查询1、带有IN谓词的子查询2、带有比较运算符的子查询3、带有ANY或ALL谓词的子查询…

MySQL查询语句

一、基本查询 1、查询多个字段 SELECT 字段1,字段2,字段3... FROM 表名; SELECT * FROM 表名;2、设置别名 SELECT 字段1 [AS 别名1],字段2 [AS 别名2]... FROM 表名;3、去除重复记录 SELECT DISTINCT 字段列表 FROM 表名;1、查询指定字段name&#xf…

webpack面试题整理

文章目录 webpack 面试题整理 谈谈你对Webpack的理解Webpack的打包过程/打包原理/构建流程?Webpack中loader的作用/ loader是什么? 常见的loader有哪些? Plugin有什么作用?/Plugin是什么 常见的Plugin有哪些Webpack 插件的执行顺序…

WebPack面试题汇总

1,Webpack有什么作用,谈谈你对它的理解 现在的前端网页功能丰富,特别是SPA(single page web application 单页应用)技术流行后,JavaScript的复杂度增加和需要一大堆依赖包,还需要解决Scss、Les…