根据seaborn documentation,它的boxplot方法使胡须长1.5 * IQR。但是,正如文档中的情节所示,情况似乎并非如此。 上下胡须不一样。此外,它似乎不是1.5 IQR。
有人可以说明他们与众不同的原因吗?
答案 0 :(得分:2)
原则上假设是正确的,如果使用四分位数范围(IQR)的倍数,则箱形图上的胡须应该具有相同的长度。
然而,基本上有两种情况并非如此。不幸的是,英语维基百科版本没有说明这些原因,但让我翻译一下german wikipedia的解释:
<强>晶须强>
一个可能的定义,源自John W. Tukey,是将晶须的长度限制在最大间距四分位数(1.5 * IQR)的1.5倍。在这种情况下,晶须不会完全以此值结束,而是来自仍然位于此边界内的数据的值。因此,晶须的长度由数据确定,而不是由四分位数范围庄严地确定。 这就是为什么晶须在盒子的两端不需要具有相同尺寸的原因。 如果1.5 * IQR边界之外没有值,则晶须的长度由最小值和最大值确定。否则,晶须外的值在图中单独标出;然后可以将这些值视为异常值。
来自同一维基百科页面的情节可能会使这一点更加明显:
如果问题中显示的图表中第二个原因肯定适用:即较低的晶须在最低数据值的位置结束。
答案 1 :(得分: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方向上使误差条不同,那么你可以在同一个数字上绘制两次,其中第二个绘图没有标记,除了误差条,以及那些误差的中心bars是+ y和-y值之间的平均值。