matplotlib中的箱形图:标记和异常值

Ame*_*ina 54 python statistics matplotlib boxplot

我有一些问题箱线图中matplotlib:

质疑.我在下面用Q1,Q2Q3突出显示的标记代表什么?我相信Q1是最大值,Q3是异常值,但Q2是什么?

                       在此输入图像描述

问题B matplotlib如何识别异常值?(即它如何知道它们不是真实的maxmin价值观?)

Ame*_*ina 85

一张图片胜过千言万语.请注意,异常值(图中的+标记)只是下面宽边之外的点[(Q1-1.5 IQR), (Q3+1.5 IQR)].

    在此输入图像描述

但是,图片仅是正态分布数据集的示例.它重要的是要理解,matplotlib 估计正态分布第一和计算从估计的分布参数的四分位数,如上所示.

相反,中位数和四分位数直接由数据计算.因此,根据数据的分布和样本的大小,您的箱线图可能看起来不同,例如,不对称且具有或多或少的异常值.

  • 因此,你的数据的"99.3%"包含在**[(Q1-1.5 IQR),(Q3 + 1.5 IQR)]`上边缘的**里面(也称为胡须).因此,除此之外的所有刻度仅代表数据的"0.7%". (2认同)
  • “ IQR”表示[四分位间距](http://www.physics.csbsju.edu/stats/box2.html) (2认同)
  • 不,无论 k 如何,matplotlib 都不会在 [Q1 -k *IQR, Q3 + k*IQR] 处绘制晶须条,“上部晶须将延伸到小于 Q3 + k*IQR) 的最后一个数据”和“下部晶须”晶须将扩展到大于 Q1 - k*IQR 的第一个数据”(文档使用whis代替k)。请参阅“whis”下的 https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.axes.Axes.boxplot.html (2认同)

set*_*eth 24

该框表示第一和第三四分位数,红线表示中位数(第二四分位数).该文件给出了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)
Run Code Online (Sandbox Code Playgroud)

哎呀:[默认1.5]

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

如果您对不同的箱形图表示感到困惑,请尝试阅读维基百科中的描述.


Joo*_*eey 22

这是一个图表,它说明了来自stats.stackexchange 答案的框的组件。请注意,如果您whis在 Pandas 中不提供关键字,则 k=1.5 。

箱线图中的带注释的框

Pandas 中的 boxplot 函数是matplotlib.pyplot.boxplot. 该matplotlib的文档详细解释箱子的部件:

问题一:

该框从数据的下四分位数值延伸到上四分位数值,在中位数处有一条线。

即四分之一的输入数据值位于框下方,四分之一的数据位于框的每个部分,其余四分之一位于框上方。

问题乙:

whis :浮点数、序列或字符串(默认值 = 1.5)

作为浮点数,确定胡须到达第一和第三四分位数以外的范围。换句话说,当 IQR 是四分位距 (Q3-Q1) 时,上须将延伸到小于 Q3 + whis*IQR 的最后一个数据。类似地,下部晶须将延伸到大于 Q1 的第一个数据 - whis*IQR。在须线之外,数据被视为异常值并绘制为单个点。

Matplotlib(和 Pandas)还为您提供了许多更改胡须默认定义的选项:

将此设置为不合理的高值以强制胡须显示最小值和最大值。或者,将其设置为百分位数的升序序列(例如,[5, 95])以将胡须设置为数据的特定百分位数。最后,whis 可以是字符串 'range' 以将胡须强制为数据的最小值和最大值。


Dir*_*irk 13

除了第四个答案(因为文档对此不太精确):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)
Run Code Online (Sandbox Code Playgroud)


Mic*_*nyk 8

下图显示了箱线图的不同部分。

在此处输入图片说明

分位数1 / Q1:25%

四分位间距(IQR):第25个百分点至第75个百分点。

中位数(第2 / Q2位数):第50个百分位数。

分位数3 / Q3:第75位。

我应该注意,蓝色部分是箱线图的晶须。

下图将正态分布的箱形图与概率密度函数进行了比较。它应该有助于解释“最小”,“最大”和离群值。

在此处输入图片说明

“最低”:(Q1-1.5 IQR)

“最大值”:(Q3 + 1.5 IQR)

正如zelusp所说,在2.698内包含99.3%的数据?(标准偏差)为正态分布。下图中的绿色圆圈(异常值)是数据的剩余0.7%。是这些数字的来源。

  • 我真的很喜欢你使用的解释和图表。您还可以提供代码让我们复制上次抽奖吗?我认为它也可以有很好的教学目的! (2认同)
  • 它在这里:https://github.com/mGalarnyk/Python_Tutorials/blob/master/Statistics/boxplot/box_plot.ipynb 我最初是为了博客文章而制作的:https://towardsdatascience.com/understanding-boxplots-5e2df7bcbd51 (2认同)

Jun*_*ter 5

万一这可以使其他人受益,我需要在我的一个箱形图上放一个图例,以便在Inkscape中制作这个小.png并认为我会分享。

在此处输入图片说明