縦軸が割合になっている棒グラフを作成したい!という方、今回は一瞬で割合棒グラフ作成する方法をご紹介します。これより簡単にかけるぜ!って方がいらっしゃったら是非コメントいただけると幸いです。
A,B,Cの数を割合で表したい。
今回は、A、B、 Cの文字数を割合の棒グラフで表してみます。はじめにグラフ作成用データを作成しておきます。
import pandas as pd import random import matplotlib.pyplot as plt plt.style.use('seaborn') #データを生成 label = random.choices(['A','B','C'],weights=[0.2,0.5,0.3],k=50) df = pd.DataFrame({'label':label})
棒グラフの作成
まずは縦軸をそれぞれの文字列の数とした棒グラフを作成します。
tmp=df['label'].value_counts().sort_index().reset_index() plt.bar(tmp['index'],tmp['label']);
このままでは縦軸が割合ではなく、数になっています。これを割合の棒グラフにしてみましょう。
縦軸が割合の棒グラフ
pointはvalue_counts
の引数で,normalize=True
を入れることです。これで、数を割合として計算してくれます。
tmp=df['label'].value_counts(normalize=True).sort_index().reset_index() plt.bar(tmp['index'],tmp['label']);
縦軸が割合になりましたね!
さらに簡単にしたい
グラフの細かい調整が必要ない方におすすめなのは、pandasのplot機能を使うことです。なんと1行で割合の棒グラフを作成できます。
df['label'].value_counts(normalize=True).sort_index().plot(y='label',kind='bar')
積み上げ棒グラフ
最後に積み上げ棒グラフも作成しておきましょう。積み上げ棒グラフはbotttom
を指定してfor文処理をするのが一般的です。
tmp=df['label'].value_counts(normalize=True).sort_index().reset_index() bottom = 0 for i in range(tmp.shape[0]): plt.bar(1, tmp['label'][i],bottom=bottom) bottom += tmp['label'][i]#bottomの更新 plt.legend(tmp['index'])#legendもつける。 plt.plot([0,2],[0,0],color='#00000000');#軸の横幅調整用のダミーplot;
※本記事は筆者が個人的に学んだこと感じたことをまとめた記事になります。所属する組織の意見・見解とは無関係です。