PythonでEXCELグラフを作成する | 棒グラフの作成

Python

PythonでEXCELの棒グラフを作成するには?

業務プログラムを作成時にはEXCELに値を挿入設定して棒グラフを作成したい場合があります。
例えば、毎月の数値報告をデータベースから読み込みを行い、EXCELグラフ化してメール等で配布したい場合等の利用用途が考えられます。


本記事では、PythonでEXCELを操作して棒グラフを作成する方法を紹介します。

EXCELの棒グラフを作成するサンプルコード

サンプルコードを紹介します。

# 必要なモジュールをインポート
# openpyxl: EXCELファイルの操作
import openpyxl
from openpyxl.chart import BarChart, Reference
from openpyxl.chart.series import DataPoint


def excel_bar_chart(data, excel_file_path):
    """
    タプルを受け取り、カテゴリの値が20以上の時に赤い棒グラフを描く関数。

    Args:
        data (tuple): 描画するデータを含むタプル。例: (("カテゴリ1", 値1), ("カテゴリ2", 値2), ...)
        excel_file_path (str): 棒グラフを保存するEXCELファイルのパス。
    """
    
    # 新しいEXCELワークブックを作成
    wb = openpyxl.Workbook()
    ws = wb.active
    ws.title = "Chart"

    # データをシートに書き込む
    for row_idx, (category, value) in enumerate(data, start=1):
        ws.cell(row=row_idx, column=1, value=category)
        ws.cell(row=row_idx, column=2, value=value)

    # 棒グラフを作成
    chart = BarChart()
    # chart.type = "bar"  # グラフのタイプを横棒グラフに設定
    chart.title = "月度ごと売上"
    chart.x_axis.title = "月"
    chart.y_axis.title = "値"

    # データ範囲を設定
    data_ref = Reference(ws, min_col=2, min_row=1, max_row=len(data))
    categories_ref = Reference(ws, min_col=1, min_row=1, max_row=len(data))
    chart.add_data(data_ref, titles_from_data=False)
    chart.set_categories(categories_ref)

    # バーの色を条件に応じて設定
    # chart.series[0] はグラフの最初のデータシリーズを取得します
    series = chart.series[0]

    # data を反復処理し、各データポイントにアクセスします
    # enumerate(data) は (index, (category, value)) のタプルを生成します
    # (_, value)とすることで、カテゴリの部分を無視し、値のみを取得します。
    for i, (_, value) in enumerate(data):
        # DataPoint オブジェクトを作成し、現在のインデックスを設定します
        dp = DataPoint(idx=i)
        
        # 値が 20 以上の場合、バーの色を赤に設定します
        if value >= 20:
            # graphicalProperties.solidFill を使ってバーの塗りつぶし色を設定します
            dp.graphicalProperties.solidFill = "FF0000"
        
        # 設定した DataPoint オブジェクトをデータシリーズのデータポイントリストに追加します
        series.dPt.append(dp)


    # グラフをシートに追加
    ws.add_chart(chart, "E5")

    # EXCELファイルを保存
    wb.save(excel_file_path)



    
##############################################################
# 関数のテスト
if __name__ == "__main__":

    # テスト用のタプルデータ
    data = (("4月", 10), ("5月", 20), ("6月", 30), 
            ("7月", 5),  ("8月", 10), ("9月", 30), 
            ("10月", 5), ("11月", 10), ("12月", 20), 
            ("1月", 30),("2月", 30), ("3月", 5))

    # EXCELファイルへのパス
    excel_file_path = "bar_chart.xlsx"

    # 関数の呼び出し
    excel_bar_chart(data, excel_file_path)

サンプルを実行する前に

openpyxlのインストールが必要ですのでインストールしていない場合には対応してください。

pip install openpyxl

実行結果

プログラム実行フォルダにbar_chart.xlsxが作成されます。

今回の例では、値が20以上の場合にグラフを赤色にする処理が入っています。
また、月度の数値を変更した場合でも値参照されているのでグラフが変更されます。
値を変更してもグラフの色付けはプログラム内で行っているので変更されません。

最後に

以上がPythonでEXCELの棒グラフを作成する方法です。

Excelテンプレートを利用して帳票を作成する方法も紹介しており、本内容と組み合わせすると帳票作成の自動化がおこなえますので、興味のある方はこちらを参照ください。

コメント

タイトルとURLをコピーしました