Я немного изменил данные вашего примера, чтобы было проще.
import seaborn as sns
import pandas as pd
import numpy as np
data = [[1.236762285232544, 1.2303414344787598, 1.196462631225586, 1.1787045001983643, 1.1760116815567017, 1.1614983081817627, 1.1546586751937866],
[1.1349891424179077, 1.1338907480239868, 1.1239897012710571, 1.1173863410949707, 1.1015456914901733, 1.1005324125289917, 1.1005228757858276]]
Для сортировки ваших данных, поскольку они представлены в формате списка, а не numpy arrays
, вы можете использовать функцию sorted
с клавишей, чтобы сказать ей выполнить операцию с каждым списком в вашем списке, то есть как эта функция будет сортировать. Параметр reverse = True
указывает сортировать по возрастанию.
sorted_data = sorted(data, key = lambda x: np.median(x), reverse = True)
Чтобы выбрать верхние списки n
, добавьте [:n]
в конец предыдущего оператора.
Чтобы построить в Seaborn, проще всего преобразовать ваши данные в pandas.DataFrame
.
df = pd.DataFrame(data).T
Это создает DataFrame с 10 столбцами (или 2 в этом примере). Мы можем переименовать столбцы, чтобы сделать каждый набор данных более понятным.
df = df.rename(columns={k: f'Data{k+1}' for k in range(len(sorted_data))}).reset_index()
И чтобы построить 2 (или 10) прямоугольника на одном графике, вы можете изменить форму информационного кадра, чтобы иметь 2 столбца, один для данных и один для номера набора данных (ID) (кредит здесь ).
df = pd.wide_to_long(df, stubnames = ['Data'], i = 'index', j = 'ID').reset_index()[['ID', 'Data']]
И тогда вы можете построить его.
sns.boxplot(x='ID', y = 'Data', data = df)