我正在使用箱线图来显示组之间值分布的差异。较低(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)

python - 如何将百分位数的seaborn boxplot晶须作为基础?-LMLPHP
plt.boxplot(tips["total_bill"], whis=[5, 95], vert=False)
plt.grid(True)

python - 如何将百分位数的seaborn boxplot晶须作为基础?-LMLPHP

我猜seaborn只是将whis传递给matplotlib方法。该文档字符串可能是从matplotlib的早期版本复制而来的。

关于python - 如何将百分位数的seaborn boxplot晶须作为基础?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50554235/

10-12 18:00