2017-06-14 5 views
1

Ich möchte Boxplots mit Seaborn in Pandas plotten, weil es eine schönere Art ist, Daten zu visualisieren, aber ich bin nicht damit vertraut. Ich habe drei Datenrahmen, die unterschiedliche Metriken sind, und ich möchte die verschiedenen Metriken vergleichen. Ich werde die Dateipfade durchlaufen, um auf sie zuzugreifen.Plotting mehrere Boxplots in Seaborn?

Die dfs für jede der Metriken sind getrennt und sehen in etwa so aus (wobei der .... angegebene Datenwerte angibt). 1, 2, 3, 4, 5 sind die Spaltennamen und zeigen verschiedene Studien:

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

ich alle Grundstücke für Versuche 1, 2, 3, 4, 5 und jeder der drei Metriken Seite haben wollen Nebeneinander, wo alle ersten Versuchsplots für die drei Metriken auf der linken Seite wären, wären alle zweiten Versuchsplots rechts davon, und so weiter.

Wie könnte ich dies in Seaborn tun? Ich weiß, ich kann durch Schleife durch den Pfad und mit Hilfe der boxplot Funktion wie diese individuell für jede Metrik ein Grundstück tun:

sns.boxplot(data=df) 

Doch wie würde ich in der Lage sein, die anderen Metriken Plots Seite-an-Seite passen auf dem gleichen Grundstück?

+0

Sie wahrscheinlich Ihre Datenrahmen in eine verschmelzen wollen und 'die boxplot' verwenden' hue' Argument. Wenn Sie Hilfe bei diesem Problem benötigen, sollten Sie einen [mcve] des Problems angeben. – ImportanceOfBeingErnest

Antwort

6

Betrachten wir zunächst eine Gruppierungsspalte wie Test für jede entsprechende Datenrahmen zuweisen, dann pd.concat Ihre Datenrahmen und schließlich pd.melt die Daten für einen Indikator/Wert lange weise Datenrahmen vor mit Seaborn Plotten. Im Folgenden zeigt, mit zufälligen Daten:

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

Verwandte Themen