web-dev-qa-db-fra.com

Tracer plusieurs boîtes à moustaches dans Seaborn?

Je veux tracer des boîtes à moustaches en utilisant Seaborn dans les pandas, parce que c'est un moyen plus agréable de visualiser les données, mais je ne les connais pas trop. J'ai trois cadres de données qui sont des métriques différentes et je veux comparer les différentes métriques. Je vais parcourir les chemins de fichiers pour y accéder.

for path in paths: 
   df = pd.read_csv(path)

Les dfs de chaque métrique sont séparés et ressemblent à ceci (où .... indique les valeurs de données renseignées). 1, 2, 3, 4, 5 sont les noms de colonne et indiquent des essais différents:

    1  2  3  4  5
0   ..............
1   ..............
2   ..............
3   ..............
4   ..............

Je souhaite que tous les graphiques des essais 1, 2, 3, 4, 5 et chacun des 3 paramètres soient côte à côte, où tous les premiers diagrammes d'essai des trois métriques seraient à gauche, puis tous les graphiques de second essai serait à droite de cela, et ainsi de suite.

Comment pourrais-je faire cela en mer-né? Je sais que je peux faire un tracé individuellement pour chaque métrique en bouclant le chemin et en utilisant la fonction boxplot comme ceci:

sns.boxplot(data=df)   

Cependant, comment pourrais-je adapter les tracés des autres métriques côte à côte sur le même tracé?

6
Jane Sully

Envisagez d’abord d’affecter une colonne de regroupement telle que Trial à chaque image donnée, puis pd.concat vos images et enfin pd.melt aux données d’un indicateur/valeur dans le temps avant de tracer avec Seaborn. Ci-dessous montre avec des données aléatoires:

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
import seaborn as sns

np.random.seed(44)
# DATAFRAMES WITH TRIAL COLUMN ASSIGNED
df1 = pd.DataFrame(np.random.randn(5,5), columns=list(range(1,6))).assign(Trial=1)
df2 = pd.DataFrame(np.random.randn(5,5), columns=list(range(1,6))).assign(Trial=2)
df3 = pd.DataFrame(np.random.randn(5,5), columns=list(range(1,6))).assign(Trial=3)

cdf = pd.concat([df1, df2, df3])                                # CONCATENATE
mdf = pd.melt(cdf, id_vars=['Trial'], var_name=['Number'])      # MELT

print(mdf.head())
#    Trial Number     value
# 0      1      1 -0.750615
# 1      1      1 -1.715070
# 2      1      1 -0.963404
# 3      1      1  0.360856
# 4      1      1 -1.190504

ax = sns.boxplot(x="Trial", y="value", hue="Number", data=mdf)  # RUN PLOT   
plt.show()

plt.clf()
plt.close()

 enter image description here

13
Parfait
# libraries
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import pandas as pd
from random import randint, gauss

# create a DataFrame
df = pd.DataFrame({
    'Sensations':[randint(1,3) for i in range(300)]
})
df['Temperature'] = df['Sensations'].map(lambda x: gauss(0.8/x,0.1)*40)
df['Sensations'] = df['Sensations'].map({1:'hot',2:'normal',3:'cold'})

# create plot
ax = sns.boxplot(x="Sensations", y="Temperature", data=df)

# show plot
plt.show()

Exemple de boîte à moustaches

0
Leandro Cruvinel