2016-05-11 5 views
2

Ich versuche, ein Balkendiagramm mit allen Beobachtungen in meiner DataFrame, die wie folgt aussieht: Dataframe (Zeilen = Jahre, Spalten = Objekte, Werte = Verletzungen des Objekts in Jahr)Mit Seaborn Barplot Wide-Form-Datenrahmen

ich die richtige Art von Graphen erhalten, wenn die Standard mit Pandas plot:

cluster_yearly_results_df.plot.bar() 

Correct Bar Plot

Allerdings würde ich mag Seaborn verwenden, wird eine d Ich habe Probleme beim Weit Form Datenrahmen eingegeben werden, unter Verwendung von:

sns.barplot(data=cluster_yearly_results_df) 

Kann ich Seaborn für das, was ich tun will?

+0

Wenn Sie verschachtelte Bars wollen, müssen Sie lange Form zu formatieren. Aber wenn das eingebaute Pandas-Plotten das macht, was du willst, bleibe ich dabei. – mwaskom

Antwort

4

Die seaborn.barplot docs sagen:

Ein Balkendiagramm für eine numerische Variable mit der Höhe jedes Rechtecks ​​und liefert einen Hinweis auf die Unsicherheit um diese Schätzung unter Verwendung von Fehlerbalken eine Schätzung der zentralen Tendenz darstellt.

Mit anderen Worten ist der Zweck, mehrere Werte für eine Variable mit einem einzelnen Stab zu repräsentieren, die die mean und Fehlerbalken für std darstellen. Sie möchten einzelne Werte mit Balken darstellen, wie es pandas.plot.bar() tut.

Nachdem dies gesagt wurde, können Sie Ihre DataFrame wie folgt anpassen, um die seaborn Schnittstelle zu entsprechen. Beginnend mit einem DataFrame ähnlich wie bei Ihnen:

df = pd.DataFrame(np.random.randint(low=0, high=10, size=(10, 3)), columns=list('ABC')) 

    A B C 
0 7 6 4 
1 3 5 9 
2 3 0 5 
3 0 1 3 
4 9 7 7 

Verwenden .stack() und .reset_index() zwei Spalten zu erzeugen, die eindeutig jeden Wert in y identifizieren:

df = df.stack().reset_index() 
df.columns = ['x', 'hue', 'y'] 

das ergibt:

x hue y 
0 0 A 6 
1 0 B 1 
2 0 C 2 
3 1 A 5 
4 1 B 7 

dann Plot :

sns.barplot(y='y', x='x', hue='hue', data=df) 

enter image description here

+0

Ich hoffe, das war doch hilfreich? – Stefan

+0

Das war sehr hilfreich, vielen Dank! Ich habe abgestimmt, aber die Stimmen werden nicht angezeigt, seit ich neu bin, und ich habe in den Regeln gelesen, dass Kommentare, die Danke sagen, vermieden werden sollten. Aber genau das habe ich gesucht! Sorry für die wirklich späte Antwort, habe gerade diesen Kommentar gesehen –

+0

Keine Sorge. Sie sollten in der Lage sein, die Antwort zu akzeptieren, dies wird Ihnen sowohl mehr Repräsentation geben als auch das Problem als geschlossen markieren, andernfalls erscheint die Frage immer noch als unbeantwortet. – Stefan