2016-04-22 14 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%積み上げ棒グラフをプロットしたいとTotal Profitをそれぞれ示します.x軸はWeek Daysで、ラベルは異なるカテゴリです。

販売総製品のための私のコードは

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を積み重ねたものではなく、凡例はカテゴリの異なるカテゴリではなく、販売された製品の合計です。

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つ質問ください。グラフ中のラベルは、(Total Products Sold、A)(販売された製品の合計、B)などを示しています。それは私が - >パッチ、labels = ax.get_legend_handles_labels()を使ったからでしょうか? A、B、Cだけを表示するにはどうすればいいですか? – Lobbie

+0

ピボットテーブルの後に次の行を追加すると、マルチインデックスの最初のレベル(このピボットテーブルの 'Total_Products_Sold'だけです)が削除されます: 'tps.columns = tps.columns.droplevel()' – hume

+0

こんにちは、とても。すべて今良い。 – Lobbie

関連する問題