
はじめに
「Excelでグラフを自動作成できたら便利だな…」そう思ったことはありませんか?
そんな時に便利なのが、Pythonのライブラリopenpyxlです。
この記事では、棒グラフを例にして、openpyxlでグラフを作成する基本ステップをわかりやすく解説します。
Excel作業を自動化したい方、Pythonで業務効率化を目指している方は、ぜひ参考にしてみてください!
openpyxlでグラフを作成する基本ステップ
openpyxlでグラフを作成する手順は以下の通りです。
openpyxlをインストールする
まず、openpyxlが使えるようにインストールしておきましょう。
pip install openpyxl
Excelに入力するデータを準備する
グラフを作成するためには、元になるデータが必要です。以下のように、売上データをExcelに書き込みます。
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
# サンプルデータの入力
data = [
["月", "売上"],
["1月", 100],
["2月", 120],
["3月", 150],
]
for row in data:
ws.append(row)
グラフオブジェクトを作成する
グラフオブジェクトとは?
openpyxlでグラフを作成するには、まずグラフオブジェクトを作る必要があります。
グラフオブジェクトは「どのグラフを」「どんな見た目で」「どんなデータを使って」表示するかを指定するための土台です。
主なグラフオブジェクトの種類
openpyxlでは、グラフの種類ごとに専用のクラス(オブジェクト)が用意されています。代表的なものは以下の通りです。
- BarChart:棒グラフ(縦棒・横棒)
- LineChart:折れ線グラフ
- PieChart:円グラフ
- ScatterChart:散布図
- AreaChart:面グラフ
グラフオブジェクトで設定できる項目
グラフオブジェクトを作成すると、次のような情報を追加・設定できます。
- タイトル:chart.title = “タイトル名”
- X軸ラベル:chart.x_axis.title = “項目名”
- Y軸ラベル:chart.y_axis.title = “数値名”
- 系列データ:chart.add_data() で指定
- カテゴリ(X軸の項目):chart.set_categories() で指定
グラフオブジェクトの作成
次に、グラフを生成するオブジェクト(ここでは棒グラフ)を作成します。
from openpyxl.chart import BarChart, Reference
# グラフオブジェクトの作成
chart = BarChart()
chart.title = "月別売上"
chart.x_axis.title = "月"
chart.y_axis.title = "売上
グラフにデータを追加する
Excelシートに書き込んだデータの範囲を指定して、グラフに紐づけます。
# データ範囲の指定(売上の列)
data_ref = Reference(ws, min_col=2, min_row=1, max_row=4)
# カテゴリの指定(月の列)
cats_ref = Reference(ws, min_col=1, min_row=2, max_row=4)
chart.add_data(data_ref, titles_from_data=True)
chart.set_categories(cats_ref)
グラフをシートに追加する
作成したグラフをシート上の任意のセルに挿入します。
ws.add_chart(chart, "E2") # E2セルにグラフを表示
Excelファイルを保存する
最後に、ファイル名を指定して保存します。
wb.save("sales_chart.xlsx")

ソースコード
from openpyxl import Workbook
from openpyxl.chart import BarChart, Reference
# ワークブックとワークシートの作成
wb = Workbook()
ws = wb.active
# データの入力(例:月別売上)
data = [
["月", "売上"],
["1月", 100],
["2月", 120],
["3月", 150],
]
for row in data:
ws.append(row)
# グラフオブジェクトの作成とタイトル・軸ラベルの設定
chart = BarChart()
chart.title = "月別売上"
chart.x_axis.title = "月"
chart.y_axis.title = "売上"
# グラフに紐づけるデータとカテゴリ(軸)を設定
data_ref = Reference(ws, min_col=2, min_row=1, max_row=4) # 売上列
cats_ref = Reference(ws, min_col=1, min_row=2, max_row=4) # 月列
chart.add_data(data_ref, titles_from_data=True)
chart.set_categories(cats_ref)
# グラフをワークシートに追加(E2セルに表示)
ws.add_chart(chart, "E2")
# ファイルを保存
wb.save("sales_chart.xlsx")
公式ドキュメント
Charts — openpyxl 3.1.3 documentation
コメント