如何突出显示某些箱线图?

How to highlight certain boxplots?

我在每个州内都有某些箱线图,这些箱线图在两个品牌之间具有统计意义。

a4_dims = (40, 10)
fig, ax = pyplot.subplots(figsize=a4_dims)
dd=pd.melt(df_box,id_vars=['region'],value_vars=['Lowe\'s','Home Depot'],var_name='brands')
a = df_box.groupby(['region']).sum()
most_visits_order = a.assign(tmp=a.sum(axis=1)).sort_values('tmp', ascending=False).drop('tmp', 1).index.tolist()
sns.boxplot(x='region',y='value',data=dd,hue='brands',showfliers=False,order=most_visits_order)

如何突出显示或提醒人们注意我发现统计差异的州? (比如说是TX,GA)

我尝试将其转换为 forloop 方法,以便我可以为每个 x 手动添加它们,但效果并不理想:

fig, ax = plt.subplots()
n=len(stat_sig)
fig,ax = plt.subplots(n,1, figsize=(6,n*2), sharex=True,squeeze=False)
for i in range(n):
    plt.sca(ax[i])
    dd=pd.melt(df_box[df_box['region']==stat_sig[i]],id_vars=['region'],value_vars=['Lowe\'s','Home Depot'],var_name='brands')
    ax = sns.boxplot(x='region',y='value',data=dd,hue='brands',width=0.2)
ax.legend_.remove()
plt.show()

错误:类型错误:无法散列的类型:'numpy.ndarray'

如果您从融化的数据框开始,很可能会更容易,例如:

from scipy import stats
import seaborn as sns
import matplotlib.pyplot as plt

np.random.seed(27)
dd = pd.DataFrame({'region':np.random.choice(['A','B','C','D','E'],50),
                  'value':np.random.uniform(0,1,50),
                  'brands':np.random.choice(['1','2'],50)})

o = dd.groupby(['region']).sum()['value'].sort_values().index

获取一个函数来执行 t.test 或其他 returns 您的 p 值:

def dotest(df):
    x,y = df.groupby('brands')['value'].apply(list)
    return stats.ttest_ind(x,y)[1]

pvalues = dd.groupby('region').apply(dotest)[o]

在图中,第一个区域的方框坐标为 0.5-1.5,第二个区域为 1.5-2.5,依此类推。所以你只需要找出你的哪些区域是重要的并突出显示它们:

fig,ax = plt.subplots(1,1)
sns.boxplot(x='region',y='value',data=dd,hue='brands',showfliers=False,order=o,ax=ax)
for i in np.where(pvalues<0.05)[0]:
    ax.axvspan(i-0.4,i+0.4, color='red', alpha=0.1)