【初心者向け】Python×openpyxlでExcelに折れ線グラフを自動作成する方法を解説

はじめに

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

コメント

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