箱线图(Box-plot)又称为盒式图或箱型图,是一种用来显示一组数据分散情况的统计图,它能显示一组数据的上界、下界、中位数、上下四分位数以及异常值等。箱线图的各部分组成及其含义如下图所示。
例1:有一组数据[12, 45, 30, 80, 36, 50, 40],分别求出q1、q2、q3。
首先对这组数据进行排序得到:[12, 30, 36, 40, 45, 50, 80],数组长度n为7;
q1的位置 = 1+(n-1)x 0.25=1 + 6*0.25 =2.5,所以q1的值为:30 + (36 - 30)*0.5 = 33
q2的位置 = 1+(n-1)x 0.5=1 + 6*0.5 =4,所以q2的值为40
q3的位置 = 1+(n-1)x 0.75=1 + 6*0.75 =5.5,所以q3的值为:45 + (50 - 45)*0.5=47.5
例2:一组数据[12, 45, 30, 80, 36, 50, 40, 43],分别求出q1、q2、q3
首先对这组数据进行排序得到:[12, 30, 36, 40, 43, 45, 50, 80],数组长度n为8;
q1的位置 = 1+(n-1)x 0.25=1 + 7*0.25 =2.75,所以q1的值为:30 + (36 - 30)*0.75 = 34.5
q2的位置 = 1+(n-1)x 0.5=1 + 7*0.5 =4.5,所以q2的值为40 + (43-40)*0.5=41.5
q3的位置 = 1+(n-1)x 0.75=1 + 7*0.75 =6.25,所以q3的值为:45 + (50 - 45)*0.25=46.25
在numpy中提供了quantile()函数,可以直接获取四分位数,例如np.quantile(x, 0.25)即可获取数组x中的q1值。
boxplot(
x, notch=None, sym=None, vert=None, whis=None,
positions=None, widths=None, patch_artist=None,
bootstrap=None, usermedians=None, conf_intervals=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, manage_ticks=True, autorange=False,
zorder=None, *, data=None):
关键参数含义说明如下:
(1)绘制单个箱线图
import matplotlib.pyplot as plt
import numpy as np
x = np.array([12, 45, 30, 70, 36, 50, 40, 26, 38])
print(sorted(x))
a = np.quantile(x, 0.75) # 上四分之一数
b = np.quantile(x, 0.25) # 下四分之一数
print("平均数:", np.mean(x)) # 打印均值
print("中位数:", np.median(x)) # 打印中位数
print("上四分之一数:", a) # 打印上四分之一数
print("下四分之一数:", b) # 打印下四分之一数
up = a + 1.5 * (a - b) # 异常值判断标准
down = b - 1.5 * (a - b) # 异常值判断标准
x = np.sort(x) # 对原始数据排序
shangjie = x[x < up][-1] # 除了异常值外的最大值
xiajie = x[x > down][0] # 除了异常值外的最小值
print("上界:", shangjie) # 打印上界
print("up:", up)
print("down:", down)
print("下界:", xiajie) # 打印下界
plt.grid(True) # 显示网格
y = plt.boxplot(x, meanline=True, showmeans=True,
flierprops={"marker": "o", "markerfacecolor": "red", "markersize": 15}) # 绘制箱形图,设置异常点大小、样式等
plt.show() # 显示图
程序执行效果图:
控制台输出结果为:
[12, 26, 30, 36, 38, 40, 45, 50, 70]
平均数: 38.55555555555556
中位数: 38.0
上四分之一数: 45.0
下四分之一数: 30.0
上界: 50
up: 67.5
down: 7.5
下界: 12
(2)绘制多个箱线图
import matplotlib.pyplot as plt
import numpy as np
x = np.random.randint(10, 100, size=(5, 9)) # 随机生成5行9列 [10, 100]之间的数
print(x) # 打印数据
plt.grid(True) # 显示网格
plt.boxplot(x, labels=list("ABCDEFGHI"), sym="r+", showmeans=True) # 绘制箱线图
plt.show() # 显示图片
程序执行效果图:
注:图中红色+号表示异常点,绿色三角形表示平均数。
控制台输出的打印结果为:
[[90 99 35 32 21 31 83 71 39]
[24 95 63 50 92 41 89 16 79]
[73 73 53 21 39 60 50 55 43]
[64 94 66 26 20 73 40 68 45]
[74 72 33 81 73 59 85 23 17]]
更多Python学习相关资源可通过以下方式联系我们获取。