Python Seaborn Boxplot: накладывать 95 процентилей на усы

1

Я хочу наложить 95 процентильных значений на морскую коробку. Я не мог понять, как накладывать текст, или если для этого есть морская возможность. Как мне изменить следующий код, чтобы наложить значения 95 процентов на график.

import pandas as pd
import numpy as np
import seaborn as sns
df = pd.DataFrame(np.random.randn(200, 4), columns=list('ABCD'))*100
alphabet = list('AB')
df['Gr'] = np.random.choice(np.array(alphabet, dtype="|S1"), df.shape[0])
df_long = pd.melt(df, id_vars=['Gr'], value_vars = ['A','B','C','D'])
sns.boxplot(x = "variable", y="value", hue = 'Gr',  data=df_long, whis = [5,95])
Теги:
pandas
matplotlib
visualization
seaborn

1 ответ

1
Лучший ответ

Рассмотрим морской сюжет. plot.text, заимствование из ответа @bernie (также исцеление +1 для включения образца набора данных). Единственная задача - настроить выравнивание из-за группировки в поле оттенка, чтобы накладывать метки на каждую серию ящиков. Даже имеют ярлыки с цветовой кодировкой в соответствии с серией.

import pandas as pd
import numpy as np
import seaborn as sns

np.random.seed(61518)
# ... same as OP

# 95TH PERCENTILE SERIES
pctl95 = df_long.groupby(['variable', 'Gr'])['value'].quantile(0.95)
pctl95_labels = [str(np.round(s, 2)) for s in pctl95]

# GROUP INDEX TUPLES
grps = [(i, 2*i, 2*i+1) for i in range(4)]
# [(0,0,1), (1,2,3), (2,4,5), (3,6,7)]

pos = range(len(pctl95))

# ADJUST HORIZONTAL ALIGNMENT WITH MORE SERIES
for tick, label in zip(grps, hplot.get_xticklabels()):
    hplot.text(tick[0]-0.1, pctl95[tick[1]] + 0.95, pctl95_labels[tick[1]], 
               ha='center', size='x-small', color='b', weight='semibold')

    hplot.text(tick[0]+0.1, pctl95[tick[2]] + 0.95, pctl95_labels[tick[2]], 
               ha='center', size='x-small', color='g', weight='semibold')
sns.plt.show()

Изображение 174551

Ещё вопросы

Сообщество Overcoder
Наверх
Меню