
はじめに
Excelに自動で折れ線グラフを描画したい場合、Pythonのopenpyxlライブラリが便利です。
本記事では、openpyxlを使ってExcelファイルに折れ線グラフを作成する方法を、実用的なコードとともに紹介します。
複数系列の追加やX軸ラベルの設定など、業務でも役立つカスタマイズ方法も含めて解説していますので、Excel自動化やレポート生成に取り組む方におすすめです。
openpyxlで折れ線グラフを作成する方法
ライブラリをインポートする
まず、Excel操作とグラフ描画に必要なモジュールをインポートします。
from openpyxl import Workbook
from openpyxl.chart import LineChart, Reference
グラフの元になるデータを準備する
wb = Workbook()
ws = wb.active
# サンプルデータ(例:月別売上)
data = [
["月", "売上"],
["1月", 100],
["2月", 150],
["3月", 130],
["4月", 170]
]
for row in data:
ws.append(row)
LineChartオブジェクト
openpyxlで折れ線グラフを作成するには、まず LineChart() オブジェクトを生成する必要があります。
LineChart() の基本設定
まずはグラフを生成するための基本的なコードです。
from openpyxl.chart import LineChart
chart = LineChart()
chart.title = "月別売上の推移"
chart.x_axis.title = "月"
chart.y_axis.title = "売上(千円)"
- chart.title:グラフ全体のタイトルを設定します。
- x_axis.title:横軸のラベル(ここでは「月」)を指定します。
- y_axis.title:縦軸のラベル(ここでは「売上」)を指定します。
グラフタイトル・軸ラベルのフォントや色をカスタマイズ
タイトルや軸ラベルは見た目を調整することができます。
from openpyxl.drawing.text import CharacterProperties
# タイトルフォント設定
chart.title.txPr = CharacterProperties(sz=1400, b=True, solidFill="1F497D") # サイズ、太字、色
chart.x_axis.title.txPr = CharacterProperties(sz=1200, solidFill="333333")
chart.y_axis.title.txPr = CharacterProperties(sz=1200, solidFill="333333")
色コードは16進数で指定します。

【保存版】openpyxlのカラーコード完全ガイド|初心者向けにRGBと色指定を解説
はじめにExcelのセルに色をつけたいけど、どんな色コードを使えばいいの?Python(openpyxl)で色を指定したいけど、RGBってなに?と悩んでいませんか?本記事では、初心者でもすぐに使えるように、openpyxlで使う色コードの基...
折れ線グラフの種類
LineChart はオプションでマーカーやスムーズなライン(滑らかな曲線)を設定することができます。
chart.marker = True # 各データポイントにマーカーを表示
chart.smooth = True # 曲線にする(滑らかな線)
マーカー付き折れ線グラフ
滑らかな折れ線グラフ
複数系列のグラフを作成する
売上・利益など、複数の系列を1つのグラフに重ねることも可能です。
# 例:2列目と3列目のデータを系列として追加
data = Reference(ws, min_col=2, max_col=3, min_row=1, max_row=5)
chart.add_data(data, titles_from_data=True)
データとカテゴリをグラフに設定する
グラフを描画するためには、Excelシート上のデータをReference()で指定し、Y軸(数値データ)とX軸(カテゴリラベル)として設定する必要があります。
Reference() での範囲指定方法
Reference() は、シート内のセル範囲を指定するための関数です。
from openpyxl.chart import Reference
# Y軸データ(売上)→ B列の1行目〜5行目
data = Reference(ws, min_col=2, min_row=1, max_row=5)
- min_col:開始列(例:B列 → 2)
- min_row:開始行(例:ヘッダー含めるなら1)
- max_row:終了行(データがある最終行)
set_categories() の使い方
X軸に表示するカテゴリ(ここでは「月」など)をset_categories()で設定します。
# A列の2行目〜5行目 → 「1月」「2月」... の部分
cats = Reference(ws, min_col=1, min_row=2, max_row=5)
chart.set_categories(cats)
X軸のラベルが1,2,3と連番になっています。
X軸のラベルがA列の1月、2月,3月が使用されています*set_categories()使用
グラフをシートに挿入し、ファイルを保存する
作成したグラフを任意のセルに表示させ、Excelファイルとして保存します。
ws.add_chart(chart, "E2") # グラフをE2セルに挿入
wb.save("line_chart.xlsx")
ソースコード
from openpyxl import Workbook
from openpyxl.chart import LineChart, Reference
# ワークブックとシートを作成
wb = Workbook()
ws = wb.active
ws.title = "データ"
# データを入力(例:月別の売上と利益)
data = [
["月", "売上", "利益"],
["1月", 100, 30],
["2月", 150, 50],
["3月", 130, 40],
["4月", 170, 60],
]
for row in data:
ws.append(row)
# グラフオブジェクトを作成
chart = LineChart()
chart.title = "月別 売上と利益の推移" # グラフタイトル
chart.x_axis.title = "月" # X軸のラベル
chart.y_axis.title = "金額(千円)" # Y軸のラベル
# データ範囲の設定(B列とC列:売上と利益)
data_ref = Reference(ws, min_col=2, max_col=3, min_row=1, max_row=5)
# カテゴリ範囲の設定(A列:1月〜4月)
cats_ref = Reference(ws, min_col=1, min_row=2, max_row=5)
# データとカテゴリをグラフに追加
chart.add_data(data_ref, titles_from_data=True)
chart.set_categories(cats_ref)
# グラフをシートに追加
ws.add_chart(chart, "E2")
# Excelファイルとして保存
wb.save("line_chart_basic.xlsx")
公式ドキュメント
Charts — openpyxl 3.1.3 documentation
コメント