我正在使用箱线图来显示组之间值的分布差异。较低(25)和较高(75)百分位数和中位数表示群体之间的分布和主要差异。然而,胡须不太清楚。默认情况下,在matlibplot或seaborn中,boxplot的胡须表示内部四分位数(IQR)的倍数(默认值:1.5),它是内部框所覆盖的值的范围。超出此范围的点将被识别为异常值。 seaborn和matlibplot都有相同的命令来改变胡须的位置:
whis : float,
Proportion of the IQR past the low and high quartiles to extend the plot whiskers.Points outside this range will be identified as outliers.
例如:
boxplots = ax.boxplot(myData, whis=1.5)
或者,matlibplot还允许将胡须基于百分位数。这对我试图用我的数据讲述的故事更有效。例如:
boxplots = ax.boxplot(myData, whis=[5, 95])
与matlibplot相比,whis=[5, 95]
在Seaborn中不起作用。现在我正在寻找基于百分位数来定义Seaborn中胡须的方法。
我的第一个想法是根据百分位数从matlibplot获取晶须的值,并找到相应的比例IQR晶须值。这就是我所做的:
for w in np.arange(0.00,2.00, 0.01):
fig, ax = plt.subplots(ncols=2, nrows=1,figsize=(8, 6))
bp = ax[0].boxplot(myData, whis=[5, 95])
ax[0].set_xlabel('bp')
ap = ax[1].boxplot(myData, whis=w)
ax[1].set_xlabel('ap')
r = 3
alo = (np.round(bp['whiskers'][0].get_ydata(), r))
blo = (np.round(ap['whiskers'][0].get_ydata(), r))
ahi = (np.round(bp['whiskers'][1].get_ydata(), r))
bhi = (np.round(ap['whiskers'][1].get_ydata(), r))
plt.close()
if [alo == blo] == [True, True]:
if [ahi == bhi] == [True, True]:
print w, "|", alo[1], "=", blo[1], '&', ahi[1], "=", bhi[1]
但问题是,这仅适用于我的数据不符合的完全正态分布。因此,我真的想找到一种方法,在Seaborn箱图中使用百分位数作为胡须。有没有办法做到这一点?