我正在使用箱线图展示不同组之间值的分布差异。下四分位数(25)和上四分位数(75)以及中位数表明了分布情况和各组之间的主要差异。然而,连线长度就不那么清晰了。在matlibplot或seaborn中,默认情况下,箱线图的连线长度是内部箱子所覆盖的内四分位距(IQR)的倍数(默认为1.5),其范围内的点将被视为异常值。 Seaborn和Matplotlib都有相同的命令来更改连线的位置:
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.
例如: For example:
boxplots = ax.boxplot(myData, whis=1.5)
此外,matlibplot还允许基于百分位数确定箱线图的须。这对我试图通过数据讲述自己的故事更为有效。例如:
boxplots = ax.boxplot(myData, whis=[5, 95])
与matlibplot不同,whis=[5, 95]
在Seaborn中不起作用。现在我正在寻找一种基于百分位数定义Seaborn中whiskers的方法。
我的第一个想法是根据百分位数从matlibplot中获取whiskers的值,并找到相应的IQR比例whisker值。这就是我所做的:
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箱线图中的百分位数来绘制晶须的方法。有没有办法可以做到这一点?
whis=[1,5,10,25,75,90,95,99]
)标记箱线图上的须部分?我想通过箱线图在可视化上标记这些点。这些是我选择的百分位数,而不仅仅是5和95。如果这种特定的方式不可行,是否还有其他方法?我听说过箱线图的改进版本,但它能否使用百分位数,而不是每次减半? - undefined