晶须被定义为1.5 * IQR,两个狩猎者怎么可能从python seaborn boxplot的情节不同?

问题描述 投票:1回答:2

根据seaborn documentation,它的boxplot方法使胡须长1.5 * IQR。但是,正如文档中的情节所示,情况似乎并非如此。上下胡须不一样。此外,它似乎不是1.5 IQR。

有人可以解释为什么他们不同吗?

enter image description here https://seaborn.pydata.org/generated/seaborn.boxplot.html

python matplotlib seaborn boxplot
2个回答
2
投票

原则上假设是正确的,如果使用四分位数范围(IQR)的倍数,则箱形图上的胡须应该具有相同的长度。

然而,基本上有两种情况并非如此。不幸的是,英语维基百科版本没有说明这些原因,但让我翻译german wikipedia的解释:

晶须 源自John W. Tukey的一个可能的定义是将晶须的长度限制为最大间距四分位数(1.5 * IQR)的1.5倍。

在这种情况下,晶须不会完全以此值结束,而是来自仍然位于该边界内的数据的值。因此,晶须的长度由数据确定,而不是由四分位数范围庄严地确定。这就是为什么晶须在盒子的两端不需要具有相同尺寸的原因。如果1.5 * IQR边界之外没有值,则晶须的长度由最小值和最大值确定。否则,晶须外的值在图中单独标出;然后可以将这些值视为异常值。

来自同一维基百科页面的图可能会使这更明显:

enter image description here

在问题中显示的图表的情况下,第二个原因肯定适用:即较低的晶须在最低数据值的位置结束。


0
投票

matplotlib允许单独的误差条(我假设你的意思是'胡须')。这是matplotlib上的页面:https://matplotlib.org/1.2.1/examples/pylab_examples/errorbar_demo.html

您可以使用xerr和yerr显式定义误差线:“xerr / yerr:标量或类似数组,形状(N,)或形状(2,N),可选

如果是标量数,len(N)类数组对象或类似N元素数组的对象,则会在相对于数据的+/-值处绘制错误列。默认值为“无”。

如果形状为2xN的序列,则相对于数据在-row1和+ row2处绘制错误条。“

...并将它们插入matplotlib.axes.Axes.errorbar中各自的位置

Axes.errorbar(x, y, yerr=None, xerr=None, fmt='', ecolor=None, elinewidth=None, capsize=None, barsabove=False, lolims=False, uplims=False, xlolims=False, xuplims=False, errorevery=1, capthick=None, *, data=None, **kwargs)

页面:https://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.errorbar.html

如果你有兴趣在+ y和-y方向上使误差条不同,那么你可以在同一个图上绘制两次,其中第二个图没有标记,除了误差条,这些误差条的中心是+ y和-y值之间的平均值。

© www.soinside.com 2019 - 2024. All rights reserved.