SNS catplot(箱线图)仅选择 5 个数据点根据其平均值显示
SNS catplot (Box plot) selecting only 5 data point to be displayed based on their mean
我有一个sns catplot(箱线图)(点击下面的link)。从 x 轴看,每次 window 都有多个箱线图,每个箱线图对应 1 个 ID。我如何编写代码,以便每次 window 始终只显示特定时间最高均值的 5 个 ID window?谢谢!`
sns.catplot('time_window', hue='ID', y='Time (ms)', data=mo_finaldf, kind="box", showfliers=False)
我找到了问题的答案。基本上,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)
我有一个sns catplot(箱线图)(点击下面的link)。从 x 轴看,每次 window 都有多个箱线图,每个箱线图对应 1 个 ID。我如何编写代码,以便每次 window 始终只显示特定时间最高均值的 5 个 ID window?谢谢!`
sns.catplot('time_window', hue='ID', y='Time (ms)', data=mo_finaldf, kind="box", showfliers=False)
我找到了问题的答案。基本上,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)