web-dev-qa-db-fra.com

Étiquetage boxplot dans seaborn avec valeur médiane

Comment puis-je étiqueter chaque boîte à moustaches dans une parcelle marine avec la valeur médiane?

Par exemple.

import seaborn as sns
sns.set_style("whitegrid")
tips = sns.load_dataset("tips")
ax = sns.boxplot(x="day", y="total_bill", data=tips)

Comment étiqueter chaque boxplot avec la valeur médiane ou moyenne?

19
user308827

Puis-je simplement dire que j'adore quand les gens incluent des exemples de jeux de données. Un +1 sain pour vous!

import seaborn as sns, numpy as np

sns.set_style("whitegrid")
tips = sns.load_dataset("tips")
ax = sns.boxplot(x="day", y="total_bill", data=tips)

medians = tips.groupby(['day'])['total_bill'].median().values
median_labels = [str(np.round(s, 2)) for s in medians]

pos = range(len(medians))
for tick,label in Zip(pos,ax.get_xticklabels()):
    ax.text(pos[tick], medians[tick] + 0.5, median_labels[tick], 
            horizontalalignment='center', size='x-small', color='w', weight='semibold')

enter image description here

25
bernie

Cela peut également être obtenu en dérivant la médiane de l'intrigue elle-même sans calculer exclusivement la médiane à partir des données

box_plot = sns.boxplot(x="day", y="total_bill", data=tips)

ax = box_plot.axes
lines = ax.get_lines()
categories = ax.get_xticks()

for cat in categories:
    # every 4th line at the interval of 6 is median  line
    y = round(lines[4+cat*6].get_ydata()[0],1) 

    ax.text(
        cat, 
        y, 
        f'{y}', 
        ha='center', 
        va='center', 
        fontweight='bold', 
        size=10,
        color='white',
        bbox=dict(facecolor='#445A64'))

box_plot.figure.tight_layout()

enter image description here

2
ShikharDua