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




3 Answers

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

但是,图片仅是正态分布数据集的示例。 重要的是要理解matplotlib不首先估计正态分布,并根据估计的分布参数计算四分位数,如上所示。

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

python画箱型图 pandas箱线图

我对matplotlib中的boxplots有一些疑问:

问题A. 我在下面用Q1Q2Q3突出显示的标记代表什么? 我认为Q1是最大值, Q3是异常值,但Q2是什么?

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




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



这是一个图形,用于说明stats.stackexchange答案中框的组件。 请注意,如果您未在Pandas中提供whis关键字,则k = 1.5。

Pandas中的boxplot函数是matplotlib.pyplot.boxplot的包装器。 matplotlib文档详细解释了框的组成部分:

问题A:

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

即四分之一的输入数据值低于方框,高于方框四分之一。

问题B:

whis:float,sequence或string(默认值= 1.5)

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

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

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




Related