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é?
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()
# 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()