Matplotlib箱线图特征点获取解析

绘制箱线图

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

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值