def get_stats_array(dataframe, Method, Cases, stat='mean', round_off=1):
mdf = dataframe
pdp = mdf[mdf['smoker'] == Cases]
if stat == 'mean':
means = pdp.groupby('day').mean()
return round(means,round_off)
elif stat == 'median':
medians = pdp.groupby('day').median()
return round(medians,round_off)
elif stat == 'min':
mins = pdp.groupby('day').min()
return mins
elif stat == 'max':
maxs = pdp.groupby('day').max()
return maxs
else:
return None
import seaborn as sns
sns.set_theme(style="ticks", palette="icefire")
tips = sns.load_dataset("tips")
Mean_Yes = get_stats_array(tips, Method=None, Cases='Yes', stat='mean', round_off=1)['total_bill']
Mean_No = get_stats_array(tips, Method=None, Cases='No', stat='mean', round_off=1)['total_bill']
Mean_array_Thu = [Mean_Yes[0] , Mean_No[0]]
Mean_array_Fri = [Mean_Yes[1] , Mean_No[1]]
Mean_array_Sat = [Mean_Yes[2] , Mean_No[2]]
Mean_array_Sun = [Mean_Yes[3] , Mean_No[3]]
CASES = ['Yes','No']
qf1 = pd.DataFrame([Mean_array_Thu], columns=CASES).assign(day='Thur')
qf2 = pd.DataFrame([Mean_array_Fri], columns=CASES).assign(day='Fri')
qf3 = pd.DataFrame([Mean_array_Sat], columns=CASES).assign(day='Sat')
qf4 = pd.DataFrame([Mean_array_Sun], columns=CASES).assign(day='Sun')
pdf = pd.concat([qf1, qf2, qf3, qf4])
pdf = pd.melt(pdf, id_vars=['day'], var_name=['CASES'])
plt.figure(1, figsize = (25,10))
ax = sns.boxplot(x="day", y="total_bill", hue="smoker", palette=["m", "g"], data=tips, showmeans=True)
sns.despine(offset=10, trim=True)
ax = sns.lineplot(x='day', y='value', data=pdf, style='CASES',ax=ax,color='black')
我试图绘制分组箱线图。我最初尝试使用 seaborn 中提供的示例。 (附代码)数据格式为熊猫数据帧。首先我绘制了箱线图,然后我尝试使用 groupby 选项获取每个组的平均值,但不知何故不起作用。所以我用平均值创建了另一个单独的数据框并尝试绘制它们。我能够得到每组均值的单独线图,但定位错误。我附上了结果图的图。我认为使用 groupby 选项可能有更好的方法来做到这一点,但我不确定如何。但主要是我希望得到的均值线图与均值和框正确对齐。谁能帮我这个?如果需要提供更多信息,请告诉我