2016-04-22 57 views
1

我得到了下面的表格是我從read_csv讀取與數據幀DF5,Python的大熊貓:繪製100%的疊式圖的問題

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 

我想繪製2個100%堆積條形圖銷售總量的產品和每個利潤總額,其中x軸是週日,標籤是不同的類別。

我對總銷售的產品代碼爲

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') 

我得到返回的圖形看起來沒有我需要的。它不是100堆疊的,圖例是Total Products Sold,而不是Category中的不同類別。

enter image description here

是否有人可以幫忙嗎?謝謝。

問候, Lobbie

回答

5

最簡單的方法就是讓數據透視表與您關心的值。嘗試是這樣的:

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) 

對我來說,這將產生以下:

enter image description here

你可以做同樣的事情Total_Profit分開。

+0

嗨休姆,謝謝你,是的它現在工作。在Excel數據透視中播放數據之後,我也在思考相同的觀點。還有1個問題。圖中的標籤顯示(已售出的產品總數,A)(已售出的產品總數,B)等。是因爲我用過 - >補丁,標籤= ax.get_legend_handles_labels()?我怎樣才能解決這個問題,只顯示A,B,C ...? – Lobbie

+0

在數據透視表後面添加下面一行應該刪除列的第一級multiindex(在這個數據透視表中只是'Total_Products_Sold'):'tps.columns = tps.columns.droplevel()' – hume

+0

嗨休謨,謝謝非常。現在都好。 – Lobbie