如何突出显示某些箱线图?
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)
我在每个州内都有某些箱线图,这些箱线图在两个品牌之间具有统计意义。
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)