绘制箱线图
bp = ax.boxplot([rain_column,unrain_column], labels=['rain','unrain'], sym='r')
箱线图特征点都存储在bp箱线图对象里
箱线图对象解析
whiskers
一共有四条线,因为画了两个箱型图,所以每个箱型图对应两条胡须线,如下图(方框内的线),每条线又由两个点组成,箭头表示两点连接成线时的连接方向
通过胡须线可以获取上下四分位以及上下极限值,这里我们只获取上下四分位,上下极限值通过caps获取
# llim 下限
# q1 下四分位
# q2 中位数
# q3 上四分位
# ulim 上限
(x_q1, y_q1), (x_llim, y_llim) = bp['whiskers'][0].get_xydata() # 第1个箱型图 下胡须两个点
(x_q3, y_q3), (x_ulim, y_ulim) = bp['whiskers'][1].get_xydata() # 第1个箱型图 上胡须两个点
# (x_q1, y_q1), (x_llim, y_llim) = bp['whiskers'][2].get_xydata() # 第2个箱型图 下胡须两个点
# (x_q3, y_q3), (x_ulim, y_ulim) = bp['whiskers'][3].get_xydata() # 第2个箱型图 上胡须两个点
caps
一共有四条线,因为画了两个箱型图,所以每个箱型图对应两条上下限的线,如下图(方框内的线),每条线又由两个点组成,点连接的方向从左至右
获取上下极限值
(x_left_low, y_llim), (x_right_up, y_llim) = bp['caps'][0].get_xydata() # 第1个箱型图下限
(x_left_up, y_ulim), (x_right_low, y_ulim) = bp['caps'][1].get_xydata() # 第1个箱型图上限
#(x_left_low, y_llim), (x_right_up, y_llim) = bp['caps'][2].get_xydata() # 第2个箱型图上限
#(x_left_low, y_llim), (x_right_up, y_llim) = bp['caps'][3].get_xydata() # 第2个箱型图下限
medians
一共有2条线,因为画了2个箱型图,所以每个箱型图对应1条中位线,如下图(方框内的线),每条线由两个点组成,点连接的方向从左至右
获取中位数
#第1个箱线图中位数
(x_left_median, y_q2), (x_right_median, y_q2) = bp['medians'][0].get_xydata()
#第2个箱线图中位数
#(x_left_median, y_q2), (x_right_median, y_q2) = bp['medians'][1].get_xydata()
获取特征点的完整代码
def mutiBoxFeatureByAx(bp):
"""获取箱体图特征
【输入】 bp 箱线图对象
【输出】 BoxFeature:箱线图特征点列表
"""
boxNum = int(len(bp['whiskers'])/2)
BoxFeature=[]
for i in range(boxNum):
# llim 下限
# q1 下四分位
# q2 中位数
# q3 上四分位
# ulim 上限
(x_q1, y_q1), (x_llim, y_ulim) = bp['whiskers'][2*i].get_xydata() # 第i+1个箱型图 下胡须两个点
(x_q3, y_q3), (x_ulim, y_llim) = bp['whiskers'][2*i+1].get_xydata() # 第i+1个箱型图 上胡须两个点
(x_left_low, y_llim), (x_right_up, y_llim) = bp['caps'][2*i].get_xydata() # 第i+1个箱型图下限
(x_left_up, y_ulim), (x_right_low, y_ulim) = bp['caps'][2*i+1].get_xydata() # 第i+1个箱型图上限
(x_left_median, y_q2), (x_right_median, y_q2) = bp['medians'][i].get_xydata() # 第i+1个箱线图中位数
feature=[y_llim,y_q1,y_q2,y_q3,y_ulim]
BoxFeature.append(feature)
return BoxFeature