LoginSignup
1
0

More than 1 year has passed since last update.

【Python】matplotlibでデータラベル入り積み上げ棒グラフを作る

Last updated at Posted at 2022-03-10

1.モジュールの準備

Pythonで積み上げ棒グラフを描く際の備忘録です。
まずは必要なモジュールをインポートします。

個人的にはラベル等は英語でいい気がしていますが、業務上レポートを書く際には日本語での記載する必要も多々あると思います。
japanize_matplotlibは、インポートするだけで簡単にタイトルや軸ラベルを日本語表示にすることができます。

import matplotlib.pyplot as plt
import japanize_matplotlib

適当なデータセットを横持ちで作ります。縦持ちデータの場合は、pivot_tableなどを使うと簡単に横持ちにすることができます。
今回はどこかしらの施設の1~3月の入場者数を積み上げ棒グラフで表してみたいと思います。

dataset = pd.DataFrame([[200, 350, 500], [150, 100, 250], [100, 400, 230]], 
                       columns=['1月', '2月', '3月'],
                       index=['male', 'female', 'Other'])
1月 2月 3月
male 200 350 500
female 150 100 250
other 100 400 230

2.関数定義

データの準備ができたら、可視化用の関数を定義します
グラフ作成の際には、大体グラフの高さ、横幅、データラベルのサイズをデータに応じて変更したくなるため、変数として放り込めるようにしたいと思います。
ただ、グラフサイズやラベルサイズを変更しても、凡例の文字は大きくならないため、plt.rcParams.update(params)を用いることで、凡例の文字サイズ、凡例ハンドル?サイズを変更しています。

def make_stack_bar(data, width, height, font, ylim, title, xlabel, ylabel):
    fig, ax = plt.subplots(figsize=(width, height))
    ax.grid(True)
    for i in range(len(data)):
        ax.bar(data.columns, 
            data.iloc[i], 
            bottom=data.iloc[:i].sum()
            )
        for j in range(len(data.columns)):
            plt.text(x=j, 
                    y=data.iloc[:i, j].sum()+(data.iloc[i, j]/2), 
                    s=data.iloc[i, j], 
                    ha='center', 
                    va='bottom',
                    fontsize=font
                    )
    ax.set_ylim([0,ylim])
    ax.legend(data.index)
    ax.set_title(title, size=24)
    ax.set_xlabel(xlabel, size=16)
    ax.set_ylabel(ylabel, size=16)
    ax.tick_params(axis='x', labelsize= 16)
    ax.tick_params(axis='y', labelsize= 14)
    params = {'legend.fontsize': 16,
            'legend.handlelength': 2}
    plt.rcParams.update(params)
    plt.show()

3.可視化

関数が定義できたら、さっそく可視化します。

make_stack_bar(dataset, 8, 8, 12, 1200, "各月の性別来場者数", "", "人数")

これで下記のようなグラフができました。
簡単なグラフならばこれで内訳がよくわかりますね。

stack_bar.png

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0