SNS Catplot(箱形图)仅根据其平均值选择要显示的5个数据点

时间:2019-03-13 10:50:07

标签: python-3.x seaborn boxplot

我有一个sns catplot(箱线图)(单击下面的链接)。从x轴看,每个时间窗口都有多个箱形图,每个箱形图对应一个ID。我该如何编码,以便在每个时间窗口中,所有时间窗口仅显示5个在特定时间均值最高的ID?谢谢!!

sns.catplot('time_window', hue='ID', y='Time (ms)', data=mo_finaldf, kind="box", showfliers=False)

Factor plot
Dataframe

1 个答案:

答案 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)