数据可视化,如何理解箱线图?箱线图各元素表示什么含义?
发布于 作者:苏南大叔 来源:程序如此灵动~画完了箱线图,如果大家对出来的图像还是一脸蒙圈的话,就证明你并不明白箱线图的含义。在本文中,苏南大叔将对箱线图的含义进行解析。理解为什么要画出对应的盒子模型?游离于箱线图外侧的圆圈,究竟是什么意思?
苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码经验文章。本文测试环境:win10
,python@3.12.3
。本文中,苏南大叔得出的结论,和网上很多的类似文章的结论存在着较大的差异。欢迎留言质疑。
获得一个箱线图
在上一篇文章里面,一个包含数据类型的dataframe
,就可以画出箱线图来。参考文章:
本文将举例非常简单的一组数据,进而探究一下箱线图的画法。数据本身没有任何现实意义,仅仅是随意编写的一组数字。
data = [1, 15, 18, 20, 22, 30, 60]
import matplotlib.pyplot as plt
plt.boxplot(data)
# 控制左侧刻度的精度
import matplotlib.ticker as ticker
ax = plt.gca()
ax.yaxis.set_major_locator(ticker.MultipleLocator(2))
# 控制显示网格
plt.grid(True, linestyle="--")
plt.show()
箱体理解
这个箱体主要分为以下几个要素:
- Q2值,50%分位数,中位数,横穿长方形箱体的那条线,不一定竖直居中。取值为所有数据中最中间的那个值,不一定真实存在。主要取决于总个数是否是偶数。
- Q1值,25%分位数,上四分位数,长方形箱体的最下边。
- Q3值,75%分位数,下四分位数,长方形箱体的最上边。
- IQR,四分位数间距,Q3-Q1。【它决定了更大的数里面,谁是最大值,谁是异常值/极端值】
- min,最小值,最下方的那个小横线。【然而,这里才是误区】。【它不一定和大家通常意识中的
min
值一致!】【重大误区】它的实际取值是[Q1-1.5*IQR,Q1)中的最小值。 - max,最大值,最上面的那个小横线。【然而,这里才是误区】。【它不一定和大家通常意识中的
max
值一致!】【重大误区】它的实际取值是(Q3,Q3+1.5*IQR]中的最大值。 - 异常值,黑色空心圆。离群值中较接近核心数据的一部分,取值范围是
(max,max+3*IQR]
和[min-3*IQR,min)
。 - 极端值,黑色实心圆。离群值中远离核心数据的一部分,取值范围是
(max+3*IQR,正无穷)
和(负无穷,min-3*IQR)
。【某些版本的箱线图里面存在实心圆】
表格总结如下:
名称 | 别名 | 箱线图元素 | 取值(范围) | 真实存在 | 误区 |
---|---|---|---|---|---|
Q2 | 50%分位数,中位数 | 横穿长方形箱体的那条线 | 所有数据中最中间的值 | 不一定 | 无 |
Q1 | 25%分位数,上四分位数 | 长方形箱体的最下边 | 不一定 | 无 | |
Q3 | 75%分位数,下四分位数 | 长方形箱体的最上边 | 不一定 | 无 | |
IQR | 四分位数间距 | 长方形箱体的垂直高度 | Q3-Q1 | 无 | |
min | 最小值 | 最下方的那个小横线 | [Q1-1.5*IQR,Q1)最小值 | 一定 | 有 |
max | 最大值 | 最上面的那个小横线 | (Q3,Q3+1.5*IQR]最大值 | 一定 | 有 |
异常值 | 离群值中较接近核心 | 黑色空心圆 | [min-3IQR,min)或(max,max+3IQR] | 一定 | 有 |
极端值 | 离群值中较远离核心 | 黑色实心圆 | (负无穷,min-3IQR)或(max+3IQR,正无穷) | 一定 | 有 |
也就是说,通常的.describe()
计算中的,
- 最小值和最大值,在箱线图中可能是离群值(异常或极端)。
- 箱线图中的最大值和最小值,是以中位数/Q3/Q1为基础,1.5倍的IQR为半径内的最大值或者最小值。
- 极端值,则是以3倍的IQR作为切割点,分为异常值和极端值。
如果数据少的话,画出的箱线图是不完整的。从中位线开始,画箱体,然后画两侧的“耳朵”【也可能只有一边耳朵】,最后才是空心圆和实心圆。
辅助 df.describe()
在于箱线图这件事情来说,df.describe()
是个非常好的辅助理解工具。因为它可以提炼出数字类型字段,并且算好它的四分位数。
import pandas as pd
df = pd.DataFrame(data)
print(df.describe())
参考链接:
- https://newsn.net/say/dataframe-describe.html
- https://newsn.net/say/dataframe-describe-2.html
- https://newsn.net/say/dataframe-median.html
- https://newsn.net/say/dataframe-quantile.html
对比验证计算过程
数据:1,15,18,20,22,30,60
长度7,奇数,第一个数索引0。
Q1,索引位(7-1)*0.25=1.5,位于15和18之间,16.5。
Q2,索引位(7-1)*0.5=3,真实存在,20。
Q3,索引位(7-1)*0.75=4.5,位于22和30之间,26。
IQR,箱体高度。Q3-Q1=9.5,1.5倍是14.25,3倍是28.5。
Q3到Q3+14.25,之间最大值是:30。最大值max
,与通常理解不符。
Q1-14.25到Q1,之间最小值是:15。最小值min
,与通常理解不符。
Q3+14.25=40.25到Q3+28.5=54.5,存在异常值0个。Q3+28.5=54.5之外,极端值1个,60,黑心圆。
Q1-28.5=-12 到 Q1-14.5= 2,存在异常值1个,1,空心圆。-12之外,极端值0个。
然而,从图上面看,并没有出现黑心圆,只有空心圆。目前,暂时认为plot
版本的箱线图里面,没有极端值和异常值的说法,统称游离值,用空心圆表示。
结语
看来这个箱线图的理解,还是需要仔细斟酌的。更多苏南大叔的python
文章,请参考:
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。