Matplotlib boxplot()绘制箱型图(附带实例)
箱形图又称箱线图、盒须图或盒式图,它是一种用来显示一组数据离散情况的统计图因形状像箱子而得名。
箱形图最大的优点就是不受异常值的影响(异常值也称为离群值),可以以一种相对稳定的方式描述数据的离散情况,因此在各领域中被广泛使用。另外,箱形图也常用于异常值的识别。
Matplotlib 绘制箱形图主要使用 boxplot() 函数,语法格式如下:
【实例 1】绘制简单箱形图,程序代码如下:

图 1 简单箱形图
上述示例是一组数据的箱形图,还可以绘制多组数据的箱形图,需要指定多组数据。例如,为三组数据绘制箱形图,主要代码如下:

图 2 多组数据的箱形图
箱形图将数据切割分离(实际上就是将数据分为四部分),如下图所示:

图 3 箱形图的组成
下面介绍箱形图每部分的具体含义及如何通过箱形图判断异常值。
其中,Q3-Q1 表示四分位差。如果使用箱形图判断异常值,其判断标准是,当变量的数据值大于箱形图的上限或者小于箱线图的下限时,就可以将这样的数据值判定为异常值。
下面介绍判断异常值的标准,如下图所示:

图 4 异常值判断标准
【实例 2】通过箱形图查找客人总消费数据中存在的异常值,程序代码如下:
绘制的箱型图如下:

图 5 箱形图
箱形图最大的优点就是不受异常值的影响(异常值也称为离群值),可以以一种相对稳定的方式描述数据的离散情况,因此在各领域中被广泛使用。另外,箱形图也常用于异常值的识别。
Matplotlib 绘制箱形图主要使用 boxplot() 函数,语法格式如下:
matplotlib.pyplot.boxplot(x, notch=None, sym=None, vert=None, whis=None, positions=None, widths=None, patch_artist=None, meanline=None, showmeans=None, showcaps=None, showbox=None, showfliers=None, boxprops=None, labels=None, flierprops=None, medianprops=None, meanprops=None, capprops=None, whiskerprops=None)参数说明见下表:
参数 | 说明 |
---|---|
x | 要绘制成箱形图的数据。 |
notch | 指定是否以凹口的形式展示箱形图,默认为非凹口。 |
sym | 指定异常点的形状,默认用“+”显示。 |
vert | 指定是否需要将箱形图垂直摆放,默认垂直摆放。 |
whis | 指定上下限与上下四分位数的距离,默认为 1.5 倍的四分位差。 |
positions | 指定箱形图中箱体的位置,默认为 [0, 1, 2, …]。 |
widths | 指定箱形图中箱体的宽度,默认值为 0.5。 |
patch_artist | 指定是否填充箱体的颜色。 |
meanline | 指定是否用线的形式表示均值,默认用点来表示。 |
showmeans | 指定是否显示均值,默认不显示。 |
showcaps | 指定是否显示箱形图顶端和末端的两条线,默认显示。 |
showbox | 指定是否显示箱形图的箱体,默认显示。 |
showfliers | 指定是否显示异常值,默认显示。 |
boxprops | 设置箱体的属性,如边框色、填充色等。 |
labels | 为箱形图添加标签,类似于图例的作用。 |
flierprops | 设置异常值的属性,如异常值点的形状、大小、填充色等。 |
medianprops | 设置中位数的属性,如线的类型、粗细等。 |
meanprops | 设置均值的属性,如点的大小、颜色等。 |
capprops | 设置箱形图顶端和末端线条的属性,如颜色、粗细等。 |
whiskerprops | 设置须的属性,如颜色、粗细、线的类型等。 |
【实例 1】绘制简单箱形图,程序代码如下:
# 导入matplotlib模块 import matplotlib.pyplot as plt x=[1,2,3,5,7,9] # x轴数据 plt.boxplot(x) # 箱形图 plt.show() # 显示图表运行程序,结果如下图所示:

图 1 简单箱形图
上述示例是一组数据的箱形图,还可以绘制多组数据的箱形图,需要指定多组数据。例如,为三组数据绘制箱形图,主要代码如下:
# 箱形图的数据 x1=[1,2,3,5,7,9];x2=[10,22,13,15,8,19];x3=[18,31,18,19,14,29] plt.boxplot([x1,x2,x3]) # 箱形图 plt.show() # 显示图表运行结果,结果如下图所示:

图 2 多组数据的箱形图
箱形图将数据切割分离(实际上就是将数据分为四部分),如下图所示:

图 3 箱形图的组成
下面介绍箱形图每部分的具体含义及如何通过箱形图判断异常值。
- 下四分位数:图中的下四分位数指的是数据的 25% 分位点所对应的值(Q1)。计算分位数可以使用 Pandas 的 quantile() 函数;
- 中位数:中位数即数据的 50% 分位点所对应的值(Q2);
- 上四分位数:上四分位数则为数据的 75% 分位点所对应的值(Q3);
- 上限:上限的计算公式为:Q3+1.5(Q3-Q1);
- 下限:下限的计算公式为:Q1-1.5(Q3-Q1)。
其中,Q3-Q1 表示四分位差。如果使用箱形图判断异常值,其判断标准是,当变量的数据值大于箱形图的上限或者小于箱线图的下限时,就可以将这样的数据值判定为异常值。
下面介绍判断异常值的标准,如下图所示:

图 4 异常值判断标准
【实例 2】通过箱形图查找客人总消费数据中存在的异常值,程序代码如下:
import matplotlib.pyplot as plt import pandas as pd df=pd.read_excel('../datas/tips.xlsx') plt.boxplot(x = df['总消费'], # 指定绘制箱形图的数据 whis = 1.5, # 指定1.5倍的四分位差 widths = 0.3, # 指定箱形图中箱体的宽度为0.3 patch_artist = True, # 填充箱体颜色 showmeans = True, # 显示均值 boxprops = {'facecolor':'RoyalBlue'}, # 指定箱体的填充色为宝蓝色 # 指定异常值的填充色、边框色和大小 flierprops={'markerfacecolor':'red','markeredgecolor':'red','markersize':3}, # 指定中位数的标记符号(虚线)和颜色 meanprops = {'marker':'h','markerfacecolor':'black','markersize':8}, # 指定均值的标记符号(六边形)、填充色和大小 medianprops = {'linestyle':'--','color':'orange'}, labels = ['']) # 去除x轴刻度值 plt.show() # 显示图表 # 计算下四分位数和上四分位数 Q1 = df['总消费'].quantile(q = 0.25) Q3 = df['总消费'].quantile(q = 0.75) # 基于1.5倍的四分位差计算上下限对应的值 low_limit = Q1 - 1.5*(Q3 - Q1) up_limit = Q3 + 1.5*(Q3 - Q1) # 查找异常值 val=df['总消费'][(df['总消费'] > up_limit) | (df['总消费'] < low_limit)] print('异常值如下:') print(val)运行程序,输出结果为:
异常值如下:
26 44.30
77 43.11
131 48.27
163 48.17
171 50.81
182 45.35
184 40.55
194 48.33
230 41.19
Name: 总消费, dtype: float64
绘制的箱型图如下:

图 5 箱形图