matplotlib箱形图:标记和exception值

我有一些关于matplotlib中的boxlot的问题:

问题A 我在Q1Q2Q3中突出显示的标记是什么? 我相信Q1是最大的, Q3是exception值,但Q2是什么?

在这里输入图像说明

问题B :matplotlib如何识别exception值 ? (即它是如何知道它们不是真正的maxmin ?)

一张图片胜过千言万语。 请注意,exception值(图中的+标记)仅仅是宽度[(Q1-1.5 IQR), (Q3+1.5 IQR)]边界之外的点。

在这里输入图像说明

但是,图片只是一个正态分布数据集的例子。 理解matplotlib首先不估计正态分布,并根据估计的分布参数计算四分位数,这一点很重要。

相反,中位数和四分位数直接根据数据计算。 因此,根据数据的分布和样本的大小,您的箱型图可能会有所不同,例如,不对称和更多或更less的exception值。

该框表示第一和第三四分位数,红线为中位数(第二四分位数)。 文档给出了1.5 IQR的默认晶须:

 boxplot(x, notch=False, sym='+', vert=True, whis=1.5, positions=None, widths=None, patch_artist=False, bootstrap=None, usermedians=None, conf_intervals=None) 

whis:[默认1.5]

将胡须的长度定义为内四分位数范围的函数。 它们延伸到(whis *(75%-25%))数据范围内的最极端的数据点。

如果您对不同的盒子图表示感到困惑,请尝试阅读wikipedia中的说明 。

除了seth的答案(因为文档不是非常精确的):Q1(wiskers)被放置在最大值低于75%+ 1.5 IQR

(最小值25% – 1.5 IQR)

这是计算晶须位置的代码:

  # get high extreme iq = q3 - q1 hi_val = q3 + whis * iq wisk_hi = np.compress(d <= hi_val, d) if len(wisk_hi) == 0 or np.max(wisk_hi) < q3: wisk_hi = q3 else: wisk_hi = max(wisk_hi) # get low extreme lo_val = q1 - whis * iq wisk_lo = np.compress(d >= lo_val, d) if len(wisk_lo) == 0 or np.min(wisk_lo) > q1: wisk_lo = q1 else: wisk_lo = min(wisk_lo) 

为了以防万一,这可以让其他人受益,我需要在我的箱子情节图上加上一个图例,所以我在Inkscape中做了这个小小的.png,并认为我会分享它。

在这里输入图像说明