Je sens que je ne pense probablement pas à quelque chose d'évident. Je veux mettre dans la même figure, la boîte à moustaches de chaque colonne d'une trame de données, où sur l'axe des x j'ai les noms des colonnes. Dans la seaborn.boxplot()
ce serait égal à groupby
par chaque colonne.
Dans pandas je ferais
df = pd.DataFrame(data = np.random.random(size=(4,4)), columns = ['A','B','C','D'])
df.boxplot()
qui donne
Maintenant, j'aimerais obtenir la même chose chez seaborn. Mais lorsque j'essaie sns.boxplot (df), je n'ai qu'un seul boxplot groupé. Comment reproduire la même figure dans Seaborn?
merci
L'équivalent marin de
df.boxplot()
est
sns.boxplot(x="variable", y="value", data=pd.melt(df))
Exemple complet:
import numpy as np; np.random.seed(42)
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.DataFrame(data = np.random.random(size=(4,4)), columns = ['A','B','C','D'])
sns.boxplot(x="variable", y="value", data=pd.melt(df))
plt.show()
Cela fonctionne parce que pd.melt
convertit une trame de données au format large
A B C D
0 0.374540 0.950714 0.731994 0.598658
1 0.156019 0.155995 0.058084 0.866176
2 0.601115 0.708073 0.020584 0.969910
3 0.832443 0.212339 0.181825 0.183405
en forme longue
variable value
0 A 0.374540
1 A 0.156019
2 A 0.601115
3 A 0.832443
4 B 0.950714
5 B 0.155995
6 B 0.708073
7 B 0.212339
8 C 0.731994
9 C 0.058084
10 C 0.020584
11 C 0.181825
12 D 0.598658
13 D 0.866176
14 D 0.969910
15 D 0.183405
Vous pouvez utiliser la méthode pandas intégrée df.plot (kind = 'box') comme suggéré dans cette question .
Je me rends compte que cette réponse ne vous aidera pas si vous avez pour utiliser seaborn, mais elle peut être utile pour les personnes ayant des exigences plus simples.
import numpy as np; np.random.seed(42)
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame(data = np.random.random(size=(4,4)), columns = ['A','B','C','D'])
df.plot(kind='box')
plt.show()