2016-11-05 11 views
1

私は異なるローンステータスのレベル内で自宅の所有権を見ています。これを積み重ね棒グラフでパーセンテージで表示したいと思います。groupbyを使用した積み重なった棒グラフの作成

私はこのコードを使用して周波数積み上げ棒グラフを作成することができました:1

が、私は、グラフを変換する方法を見つけ出すことはできません。私は、この絵を与える

df_trunc1=df[['loan_status','home_ownership','id']] 
sub_df1=df_trunc1.groupby(['loan_status','home_ownership'])['id'].count() 
sub_df1.unstack().plot(kind='bar',stacked=True,rot=1,figsize=(8,8),title="Home ownership across Loan Types") 

をパーセンテージ。したがって、たとえば、私はここなど所有する住宅ローンを持っている割合デフォルト・グループ、、、

以内に取得したいのですが、コンテキスト2のための私のGROUPBYテーブルです:

感謝!!

+0

は、テキストではなく画像としての質問に、あなたのGROUPBYデータを追加します。それは、より簡単に、より可能性の高い回答になります。 – cco

答えて

1

私はあなたのパーセンテージを自分で変換する必要があると考えている:

d = {('Default', 'MORTGAGE'): 498, ('Default', 'OWN'): 110, ('Default', 'RENT'): 611, ('Fully Paid', 'MORTGAGE'): 3100, ('Fully Paid', 'NONE'): 1, ('Fully Paid', 'OTHER'): 5, ('Fully Paid', 'OWN'): 558, ('Fully Paid', 'RENT'): 2568, ('Late (16-30 days)', 'MORTGAGE'): 1101, ('Late (16-30 days)', 'OWN'): 260, ('Late (16-30 days)', 'RENT'): 996, ('Late (31-120 days)', 'MORTGAGE'): 994, ('Late (31-120 days)', 'OWN'): 243, ('Late (31-120 days)', 'RENT'): 1081} 

sub_df1 = pd.DataFrame(d.values(), columns=['count'], index=pd.MultiIndex.from_tuples(d.keys())) 
sub_df2 = sub_df1.unstack() 
sub_df2.columns = sub_df2.columns.droplevel() # Drop `count` label. 
sub_df2 = sub_df2.div(sub_df2.sum()) 
sub_df2.T.plot(kind='bar', stacked=True, rot=1, figsize=(8, 8), 
       title="Home ownership across Loan Types") 

enter image description here

sub_df3 = sub_df1.unstack().T 
sub_df3.index = sub_df3.index.droplevel() # Drop `count` label. 
sub_df3 = sub_df3.div(sub_df3.sum()) 
sub_df3.T.plot(kind='bar', stacked=True, rot=1, figsize=(8, 8), 
       title="Home ownership across Loan Types") 

enter image description here

+0

これは、y軸が0から4になることを除いて、同じ高さではなく、以前と同じ相対高さの棒を与えています。なぜそれが起こっているのかについての考えはありますか? – yogz123

+0

サンプルデータを投稿できますか? 'sub_df1.to_dict( 'list')' – Alexander

+0

'list'を使って私にエラーを与えていたので、代わりに 'dict'を使いました。 [デフォルト: 'MORTGAGE']:498、 ( 'デフォルト'、 'OWN'):110、 ( 'デフォルト'、 'RENT'):611、 ( '完全支払い'、 'MORTGAGE') :3100、 ( '完全支払い'、 'なし'):1、 ( '完全支払い'、 'その他'):5、 ( '完全支払い'、 '所有'):558、 '、' RENT '):2568、 (' Late(16-30日) '、' MORTGAGE '):1101、 ('遅く(16-30日) '、' OWN '):260、 996、 ( 'Late(31-120 days)'、 'MORTGAGE'):994、 ( 'Late(31-120 days)'、 'OWN' ):243、 ( 'Late(31-120 days)'、 'RENT'):1081} – yogz123

関連する問題