我正在使用箱线图来显示组之间值分布的差异。较低(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箱形图中将百分位数用于晶须的方法。有什么办法吗?
最佳答案
Seaborn在这方面似乎与matplotlib相同:
tips = sns.load_dataset("tips")
ax = sns.boxplot(x=tips["total_bill"], whis=[5, 95])
plt.grid(True)
plt.boxplot(tips["total_bill"], whis=[5, 95], vert=False)
plt.grid(True)
我猜seaborn只是将
whis
传递给matplotlib方法。该文档字符串可能是从matplotlib的早期版本复制而来的。关于python - 如何将百分位数的seaborn boxplot晶须作为基础?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50554235/