如何从matplotlib boxplot箱线图对象中提取中位数、均值等统计值
从matplotlib箱线图返回对象提取统计值的方法
可以直接从boxplot返回的绘图对象中提取中位数、均值、四分位数、上下须边界的数值,但标准差无法从该对象中提取,因为箱线图绘制过程不会计算和存储标准差。
所有统计量对应的存储对象都是Line2D类型,其y坐标值即为对应统计量的数值(统计线为水平方向,两个端点y值完全一致,取任意一个即可),提取方法如下:
提取代码示例
假设你已运行如下代码得到箱线图返回对象:
box = ax.boxplot(data, showmeans=True)
1. 提取中位数
对应返回字典中medians键的Line2D列表:
medians = [median_line.get_ydata()[0] for median_line in box['medians']]
2. 提取均值
对应返回字典中means键的Line2D列表,注意绘图时必须开启showmeans=True参数才会生成该键的内容:
means = [mean_line.get_ydata()[0] for mean_line in box['means']]
3. 提取上下四分位数(Q1、Q3)
对应返回字典中boxes键的Line2D列表,箱体的上下边分别对应Q3和Q1:
q1_list = [] q3_list = [] for box_line in box['boxes']: y_vals = box_line.get_ydata() q1_list.append(y_vals[0]) # 箱体底边对应Q1 q3_list.append(y_vals[2]) # 箱体顶边对应Q3
4. 提取上下须边界(非异常值的最小/最大值)
对应返回字典中whiskers键的Line2D列表,每两个元素对应一组数据的下须和上须:
whisker_min = [] whisker_max = [] for i in range(0, len(box['whiskers']), 2): lower_whisker = box['whiskers'][i] upper_whisker = box['whiskers'][i+1] whisker_min.append(lower_whisker.get_ydata()[1]) whisker_max.append(upper_whisker.get_ydata()[1])
标准差相关说明
箱线图的原生绘制逻辑不涉及标准差计算,因此返回的绘图对象中没有存储该数值,如需校验标准差请直接从原始数据计算即可。
内容的提问来源于stack exchange,提问作者feedMe
相关产品推荐
相关产品推荐

