SNS catplot (Box plot) выбирает только 5 точек данных для отображения на основе их среднего - PullRequest
2 голосов
/ 13 марта 2019

У меня есть sns catplot (boxplot) (нажмите на ссылку ниже).Для каждого временного окна, если смотреть с оси x, есть несколько боксов, каждый из которых соответствует 1 идентификатору.Как я могу кодировать так, чтобы для каждого временного окна отображались только 5 идентификаторов самого высокого среднего значения в конкретное время для всего временного окна?Спасибо! `

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

Factor plot
Dataframe

1 Ответ

1 голос
/ 15 марта 2019

Я нашел ответ на свой вопрос. В основном, у seaborn и Matplotlib нет никаких настроек для них, и вы должны разделить свой фрейм данных самостоятельно. То, что я сделал, это групповое соединение с последующим соединением 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)
...