我有一个sns catplot(箱线图)(单击下面的链接)。从x轴看,每个时间窗口都有多个箱形图,每个箱形图对应一个ID。我该如何编码,以便在每个时间窗口中,所有时间窗口仅显示5个在特定时间均值最高的ID?谢谢!!
sns.catplot('time_window', hue='ID', y='Time (ms)', data=mo_finaldf, kind="box", showfliers=False)
答案 0 :(得分:1)
我找到了我问题的答案。基本上,seaborn和Matplotlib对此没有任何设置,您必须自己拆分数据帧。我所做的是一个groupby,之后是一个SQL连接。希望它能对以后遇到相同问题的任何人有所帮助。
df_to_join = mo_finaldf.groupby(['time_window', 'ID']).agg({"time": {'Mean': 'mean', 'var': 'var'}})\
['time'].sort_values(by='Mean', ascending=False).sort_index(level='time_window', sort_remaining=False)
highest_5_mean = df_to_join.groupby(['time_window']).head(5).copy()
highest_5_mean.reset_index(inplace=True)
highest_5_mean.rename(columns={'time': 'Mean'}, inplace=True)
dataset_filtered = pd.merge(mo_finaldf, highest_5_mean, how='inner', left_on=['time_window', 'tap'],
right_on=['time_window', 'ID'])
sns.catplot(x='time_window', hue='tap', y='time', data=dataset_filtered, kind="box",
showfliers=False)