医療職からデータサイエンティストへ

統計学、機械学習に関する記事をまとめています。

Pythonで割合棒グラフ、積み上げ棒グラフを一瞬で作成する。

縦軸が割合になっている棒グラフを作成したい!という方、今回は一瞬で割合棒グラフ作成する方法をご紹介します。これより簡単にかけるぜ!って方がいらっしゃったら是非コメントいただけると幸いです。

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;

積み上げ棒グラフ

※本記事は筆者が個人的に学んだこと感じたことをまとめた記事になります。所属する組織の意見・見解とは無関係です。