Wie man mit Python Cluster von gestapelten Stäben hat (Pandas)
So sieht mein Datensatz aus:
In [1]: df1=pd.DataFrame(np.random.rand(4,2),index=["A","B","C","D"],columns=["I","J"])
In [2]: df2=pd.DataFrame(np.random.rand(4,2),index=["A","B","C","D"],columns=["I","J"])
In [3]: df1
Out[3]:
I J
A 0.675616 0.177597
B 0.675693 0.598682
C 0.631376 0.598966
D 0.229858 0.378817
In [4]: df2
Out[4]:
I J
A 0.939620 0.984616
B 0.314818 0.456252
C 0.630907 0.656341
D 0.020994 0.538303
Ich möchte gestapelte Balkendiagramme für jeden Datenrahmen haben, aber da sie denselben Index haben, möchte ich 2 gestapelte Balken pro Index haben.
Ich habe versucht, beide auf den gleichen Achsen zu zeichnen:
In [5]: ax = df1.plot(kind="bar", stacked=True)
In [5]: ax2 = df2.plot(kind="bar", stacked=True, ax = ax)
Aber es überschneidet sich.
Dann habe ich zuerst versucht, die beiden Datensätze zusammenzufassen:
pd.concat(dict(df1 = df1, df2 = df2),axis = 1).plot(kind="bar", stacked=True)
aber hier ist alles gestapelt
Mein bester Versuch ist:
pd.concat(dict(df1 = df1, df2 = df2),axis = 0).plot(kind="bar", stacked=True)
Welches gibt:
Dies ist im Grunde das, was ich will, außer dass ich die Bar als bestellt haben möchte
(df1, A) (df2, A) (df1, B) (df2, B) etc ...
Ich denke, es gibt einen Trick, aber ich kann ihn nicht finden!
Nach @ bgschillers Antwort bekam ich folgendes:
Welches ist fast das, was ich will. Ich hätte gerne die Bargruppiert nach Index, um etwas visuell klar zu haben.
Bonus : Da das x-label nicht redundant ist, so etwas wie:
df1 df2 df1 df2
_______ _______ ...
A B
Danke fürs Helfen.