2016-04-22 5 views
1

I mit der folgenden Tabelle einen Datenrahmen DF5 bekam, die ich in von read_csv lesen,Python Pandas: Trägt man 100% gestapelt Graph Ausgabe

Week_Days,Category,Total_Products_Sold,Total_Profit 
0.Monday,A,3221,9999.53 
0.Monday,B,1038,26070.33 
0.Monday,C,699,13779.56 
0.Monday,E,3055,18157.26 
0.Monday,F,47569,215868.15 
0.Monday,G,2348,23695.25 
0.Monday,H,6,57 
0.Monday,I,14033,64594.24 
0.Monday,J,13876,47890.91 
0.Monday,K,3878,14119.74 
0.Monday,L,243,2649.6 
0.Monday,M,2992,16757.38 
1.Tuesday,A,2839,8864.78 
1.Tuesday,B,1013,26254.69 
1.Tuesday,C,656,13206.98 
1.Tuesday,E,2696,15872.45 
1.Tuesday,F,43039,197621.18 
1.Tuesday,G,2107,21048.72 
1.Tuesday,H,3,17 
1.Tuesday,I,12297,56942.99 
1.Tuesday,J,12095,40724.2 
1.Tuesday,K,3418,12551.26 
1.Tuesday,L,243,2520.3 
1.Tuesday,M,2375,13268.28 
2.Wednesday,A,2936,9119.93 
2.Wednesday,B,1061,26927.86 
2.Wednesday,C,634,10424.05 
2.Wednesday,E,2835,16627.35 
2.Wednesday,F,46128,218014.59 
2.Wednesday,G,1986,19173.64 
4.Friday,H,24,233 
4.Friday,I,17576,81648.75 
4.Friday,J,16468,55820.9 
4.Friday,K,4294,16603.39 
4.Friday,L,440,4258.51 
4.Friday,M,3600,20142.44 
5.Saturday,A,4658,15051.13 
5.Saturday,B,1492,38236.07 
5.Saturday,C,1057,15449.7 
5.Saturday,E,5335,29904.96 
5.Saturday,F,79925,362120.61 
5.Saturday,G,4324,44088.79 
5.Saturday,H,26,933 
5.Saturday,I,22688,106313.86 
5.Saturday,J,21882,74725.11 
5.Saturday,K,5402,20875.84 
5.Saturday,L,458,4692.84 
5.Saturday,M,4896,27769.68 
6.Sunday,A,3429,11310.1 
6.Sunday,B,1104,27282.99 
6.Sunday,C,1051,11567.08 
6.Sunday,E,3913,22740.63 
6.Sunday,F,56048,259105.03 
6.Sunday,G,3224,32528.39 
6.Sunday,H,21,749 
6.Sunday,I,15853,74876.77 
6.Sunday,J,16072,55259.76 
6.Sunday,K,4383,16058.36 
6.Sunday,L,327,3348.82 
6.Sunday,M,3551,20814.05 

I 2 100% gestapeltes Balkendiagramme darstellen möge für Total Produkte verkauft und Total Profit jeweils, wobei die x-Achse Wochentage ist und die Beschriftungen die verschiedenen Kategorien sind.

Mein Code für die insgesamt verkauften Produkte ist

df5 = df5.set_index(['Week_Days', 'Category']) 
df5 = df5.div(df5.sum(1), axis=0) 
ax = df5[['Total_Products_Sold']].plot(kind='bar', stacked=True, width = 0.3, figsize=(20, 10), colormap="RdBu") 
patches, labels = ax.get_legend_handles_labels() 
ax.legend(bbox_to_anchor=(1.1, 1.0)) 
ax.set_xlabel('Week Days') 
ax.set_ylabel('Products Sold') 

Der Graph kehre ich habe nichts sieht die ich brauche. Es ist nicht 100 stacked und die Legende ist Total Products Sold und nicht die verschiedenen Kategorien in der Kategorie.

enter image description here

Kann jemand bitte helfen? Vielen Dank.

Grüße, Lobbie

Antwort

5

Der einfachste Weg ist eine Pivot-Tabelle mit den Werten, die Sie interessieren zu machen. so etwas wie dieses versuchen:

tps = df5.pivot_table(values=['Total_Products_Sold'], 
         index='Week_Days', 
         columns='Category', 
         aggfunc='sum') 

tps = tps.div(tps.sum(1), axis=0) 
tps.plot(kind='bar', stacked=True) 

Für mich Daraus ergeben sich folgende:

enter image description here

Sie können für Total_Profit separat das gleiche tun.

+0

Hallo hume, danke und ja, es hat jetzt funktioniert. Nach dem Abspielen der Daten in einem Excel-Pivot dachte ich auch in die gleiche Richtung. 1 weitere Frage bitte. Die Etiketten in der Grafik zeigten (verkaufte Produkte insgesamt, A) (verkaufte Produkte insgesamt, B) und so weiter. Liegt es daran, dass ich -> patches, labels = ax.get_legend_handles_labels() verwendet habe? Wie kann ich das beheben, um nur A, B, C ... zu zeigen? – Lobbie

+0

Das Hinzufügen der folgenden Zeile nach der Pivot-Tabelle sollte die erste Ebene des Spalten-Multiindex entfernen (was nur 'Total_Products_Sold' in dieser Pivot-Tabelle ist): 'tps.columns = tps.columns.droplevel()' – hume

+0

Hallo hume, danke sehr viel. Alles gut jetzt. – Lobbie