【发布时间】:2018-05-28 18:22:22
【问题描述】:
我使用箱线图来显示组间值分布的差异。较低 (25) 和较高 (75) 百分位数和中位数表示组间的分布和主要差异。然而,晶须不太清晰。默认情况下,在 matlibplot 或 seaborn 中,箱线图的胡须是内四分位数范围 (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 箱线图中使用百分位数作为胡须的方法。有没有办法做到这一点?
【问题讨论】:
标签: python matplotlib seaborn boxplot