【Python】Matplotlibで棒グラフを作成し見た目や目盛りを詳細に設定する

目次

概要

Pythonのデータ可視化ライブラリであるMatplotlibを使用し、デザインを調整した棒グラフを作成するレシピです。

単にグラフを表示するだけでなく、棒の色、枠線の太さ、幅、軸目盛りのラベル設定など、主要なパラメータを制御して見やすいグラフを作成する方法を解説します。

仕様(入出力)

  • 入力: カテゴリ名(文字列のリスト)、数値データ(整数のリスト)、各種スタイル設定(色、幅など)
  • 出力: ウィンドウへのグラフ描画(plt.show())、または画像ファイルとしての保存
  • 要件: matplotlib ライブラリがインストールされていること

最小の使い方

import matplotlib.pyplot as plt

# 最小限のデータ
categories = ["Item 1", "Item 2", "Item 3"]
values = [100, 150, 80]

# グラフ描画
fig, ax = plt.subplots()
ax.bar(categories, values)
plt.show()

コード全文

ここでは、棒の幅や色、枠線、軸ラベルの位置などを細かく指定した完全なコードを提示します。

import matplotlib.pyplot as plt

def main():
    # 1. データの準備(部門ごとのスコアなどを想定)
    departments = ["Sales", "Marketing", "Develop", "HR", "Support"]
    scores = [85, 62, 95, 70, 78]

    # X軸の座標位置を定義(0, 1, 2...)
    x_positions = range(len(departments))

    # 2. 図(Figure)と座標軸(Axes)の生成
    # figsizeで画像のサイズを指定(横インチ, 縦インチ)
    fig, ax = plt.subplots(figsize=(8, 5))

    # 3. 棒グラフの描画とスタイルの適用
    # 引数で色や枠線、幅などを指定
    ax.bar(
        x=x_positions,          # X軸の位置
        height=scores,          # 棒の高さ(データ値)
        width=0.6,              # 棒の幅(1.0で隙間なし)
        bottom=0,               # Y軸の開始位置
        color='#66b3ff',        # 塗りつぶしの色(Hexカラー)
        edgecolor='#003366',    # 枠線の色
        linewidth=2,            # 枠線の太さ
        align='center'          # 目盛りの配置('center' または 'edge')
    )

    # 4. 軸目盛りとラベルの設定
    # X軸の数値を指定
    ax.set_xticks(x_positions)
    # 数値に対応するラベル(部門名)を適用
    ax.set_xticklabels(departments)

    # その他の見た目調整(タイトルやラベル)
    ax.set_title("Department Performance Scores")
    ax.set_xlabel("Department")
    ax.set_ylabel("Score")
    
    # グリッド線の表示(Y軸のみ、破線、透明度設定)
    ax.grid(axis='y', linestyle='--', alpha=0.7)

    # 5. 描画実行
    plt.show()

if __name__ == "__main__":
    main()

カスタムポイント

ax.bar() メソッドおよび Axes オブジェクトで使用できる主要なパラメータと設定メソッドの一覧です。これらを変更することでグラフの表現を調整できます。

ax.bar() の主な引数

パラメータ名説明設定例
xX軸上の位置(座標)。必須。[0, 1, 2]
height棒の高さ(データの値)。必須。[10, 20, 30]
width棒の幅。デフォルトは 0.8。0.5
bottom棒の底辺のY座標。積み上げグラフに使用。0 (デフォルト)
color棒の塗りつぶし色。色名やHexコード。'blue', '#FF5733'
edgecolor棒の枠線の色。'black'
linewidth枠線の太さ(ポイント単位)。2.0
align目盛りに対する棒の位置合わせ。'center' (推奨), 'edge'

軸設定メソッド(Axes オブジェクト)

メソッド名説明使用目的
set_xticks軸目盛りを表示する位置(数値)を指定。棒の中心に目盛りを合わせる
set_xticklabels目盛り位置に対応するラベル(文字列)を指定。数値をカテゴリ名に置き換える
  • 色の変更: color には 'skyblue', 'salmon' などの名前指定のほか、'#RRGGBB' 形式のカラーコードも使用可能です。
  • 枠線の強調: 背景色が白い場合、薄い色の棒グラフは見にくくなることがあります。edgecolorlinewidth を設定して視認性を高めてください。

注意点

  1. 日本語の文字化けMatplotlibのデフォルト設定では日本語が含まれると「□□□」のように文字化けします。日本語を表示する場合は、対応フォントをインストールして設定するか、英語表記で統一することをお勧めします。
  2. xとheightの要素数不一致x(位置)と height(値)のリストの長さは必ず一致させてください。長さが異なると ValueError が発生します。
  3. alignの設定align=’edge’ に設定すると、棒の左端が x の座標に来るため、ラベルとの位置関係がずれて見えることがあります。通常はデフォルトの ‘center’ を使用します。

バリエーション(任意)

水平棒グラフ(barh

項目名が長い場合や、ランキング形式の表示には水平棒グラフが適しています。width の代わりに height で棒の太さを指定するなど、引数が一部異なります。

import matplotlib.pyplot as plt

def create_horizontal_bar():
    labels = ["Long Category Name A", "Long Category Name B", "Long Category Name C"]
    values = [45, 88, 30]
    y_pos = range(len(labels))

    fig, ax = plt.subplots(figsize=(8, 3))

    # barh を使用
    ax.barh(
        y=y_pos,
        width=values,       # 値は width に渡す
        height=0.5,         # 棒の太さは height で指定
        color='lightgreen',
        edgecolor='green'
    )

    ax.set_yticks(y_pos)
    ax.set_yticklabels(labels)
    
    # X軸の範囲を調整
    ax.set_xlim(0, 100)

    plt.tight_layout()
    plt.show()

if __name__ == "__main__":
    create_horizontal_bar()

まとめ

Matplotlibで棒グラフを作成する際は、ax.bar() の引数を適切に設定することで、デザイン性の高いグラフを作成できます。

特に set_xticks と set_xticklabels を組み合わせることで、任意のカテゴリデータを軸に分かりやすく表示可能です。用途に合わせて色や幅を調整し、可読性の高いグラフを目指してください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次