Pythonでグラフを自動化するなら必須!Referenceオブジェクトでデータ系列とカテゴリ軸を設定する方法

openpyxl

はじめに:この記事で解決できること

Pythonのopenpyxlライブラリを使えば、Excelのグラフ作成を自動化できて非常に便利ですよね。しかし、いざグラフを作ろうとしたとき、「どのセルのデータを、どうやってグラフに反映させればいいの?」と手が止まってしまった経験はありませんか?

グラフ作成の心臓部とも言えるのが、今回解説する**openpyxl.chart.Reference**クラスです。このReferenceを理解しないままでは、openpyxlでのグラフ作成はマスターできません。

この記事を最後まで読めば、あなたのそんな悩みはスッキリ解決します。

  • PythonのopenpyxlでExcelグラフを作成する際に、どのセルのデータをグラフにすればよいか分からず困っている
  • openpyxl.chart.Referenceクラスの基本的な役割と使い方がわかる
  • グラフの**「データ系列(Y軸の値)」**をReferenceオブジェクトで指定する方法(add_data)がわかる
  • グラフの**「カテゴリ軸(X軸のラベル)」**をReferenceオブジェクトで指定する方法(set_categories)がわかる
  • これらを使って、Excelの特定の範囲のデータを思い通りにグラフ化できるようになる

Referenceを使いこなし、退屈なグラフ作成作業から解放されましょう!


準備:グラフ作成の土台となるデータを用意する

まずは、解説のベースとなる簡単な売上データが入ったExcelファイルを作成しましょう。以下のPythonコードを実行すると、reference_sample.xlsxというファイルが生成されます。

このデータを使って、グラフの作成方法を学んでいきます。

import openpyxl

# ワークブックとアクティブなシートを準備
wb = openpyxl.Workbook()
ws = wb.active
ws.title = "月別売上データ"

# グラフの元となるサンプルデータを書き込む
rows = [
    ("月", "売上(万円)"),
    ("4月", 120),
    ("5月", 155),
    ("6月", 140),
    ("7月", 180),
    ("8月", 175),
]

for row in rows:
    ws.append(row)

# この時点でのExcelファイルを保存
wb.save("reference_sample.xlsx")

このコードを実行すると、A列に月、B列に売上が入ったシンプルなシートができます。ここからグラフを作成していきます。


Referenceオブジェクトとは? Excelの「範囲選択」をコードで実現

では、この記事の主役である**Reference**オブジェクトとは一体何者なのでしょうか?

結論から言うと、Referenceオブジェクトは、ワークシート上の特定のセル範囲(例:「B2セルからB6セルまで」)をプログラム上で表現するための設計図のようなものです。

一番わかりやすいのは、Excelでマウスをドラッグしてセル範囲を選択する操作を、Pythonコードで仮想的に行っているイメージです。

グラフを作成する際には、openpyxlに対して「この範囲の数値をグラフの棒の高さにしてね」「そして、こちらの範囲の文字列をグラフの横軸のラベルとして使ってね」といった指示を出す必要があります。その「この範囲」を定義するのがReferenceオブジェクトの最も重要な役割なのです。


【最重要】add_data()でデータ系列(Y軸の値)を設定する

グラフの見た目を直接決定する、棒の高さや線の位置。これらをデータ系列と呼びます。

結論として、グラフにしたい数値データの範囲をReferenceで作成し、それをchart.add_data()メソッドに渡すことで、データ系列が設定されます。

Referenceの基本的な引数

Referenceオブジェクトを作成する際には、主に以下の引数を指定します。

  • worksheet: 対象となるワークシートオブジェクト。
  • min_col: 範囲の開始列の番号(A列=1, B列=2…)。
  • min_row: 範囲の開始行の番号。
  • max_col: 範囲の終了列の番号。
  • max_row: 範囲の終了行の番号。

具体的なコード例

先ほど作成したExcelデータの「売上(万円)」の部分(B1セルからB6セルまで)をグラフのデータ系列として指定してみましょう。

from openpyxl.chart import BarChart, Reference # Referenceをインポート

# (前述のExcel作成コードの続き)

# 1. グラフオブジェクトを作成
chart = BarChart()
chart.title = "月別売上推移"

# 2. データ系列の範囲をReferenceで指定
# B1セルからB6セルまで (列=2, 行=1から6)
values = Reference(ws, min_col=2, min_row=1, max_col=2, max_row=6)

# 3. グラフにデータ系列を追加
# titles_from_data=Trueで、B1セルの「売上(万円)」を凡例名として使用
chart.add_data(values, titles_from_data=True)

add_dataの第2引数titles_from_data=Trueは非常に便利です。これを指定すると、Referenceで指定した範囲の先頭セル(この場合はB1セル)の値を、グラフの凡例(「これは何のデータか」を示すラベル)として自動で使ってくれます。


set_categories()でカテゴリ軸(X軸のラベル)を設定する

データ系列(値)を設定しただけでは、それぞれの値が「何に対応するものなのか」が分かりません。例えば、売上120万円が何月のものなのか、グラフに示す必要があります。これをカテゴリ軸(一般的にはX軸)と呼びます。

結論は、グラフの横軸に表示したいラベルデータの範囲を、もう一つ別のReferenceオブジェクトで作成し、それをchart.set_categories()メソッドに渡します。

なぜadd_dataと分かれているのか?

役割が明確に違うからです。

  • add_data: グラフで描画される**「値」そのもの**(棒の高さなど)を担当します。
  • set_categories: それらの値が**「何のデータか」を示すラベル**(横軸の項目名)を担当します。

この2つを組み合わせることで、初めて意味のあるグラフが完成します。

具体的なコード例

「月」のデータ(A2セルからA6セルまで)をカテゴリ軸として設定しましょう。

# (add_dataのコードの続き)

# 4. カテゴリ軸の範囲をReferenceで指定
# A2セルからA6セルまで (列=1, 行=2から6)
# ※今回はタイトル行(A1)は不要なので、2行目から指定
labels = Reference(ws, min_col=1, min_row=2, max_row=6)

# 5. グラフにカテゴリ軸を設定
chart.set_categories(labels)

ここでは、カテゴリ名にヘッダー(A1セルの”月”)は不要なので、min_row=2と指定しているのがポイントです。


実践:Referenceを使ってグラフを完成させる全コード

それでは、これまでのステップをすべて統合し、グラフを実際にExcelファイルへ追加して保存するまでの完全なコードを見てみましょう。このコードをコピペして実行すれば、すぐに結果を確認できます。

import openpyxl
from openpyxl.chart import BarChart, Reference

# ワークブックとアクティブなシートを準備
wb = openpyxl.Workbook()
ws = wb.active
ws.title = "月別売上データ"

# グラフの元となるサンプルデータを書き込む
rows = [
    ("月", "売上(万円)"),
    ("4月", 120),
    ("5月", 155),
    ("6月", 140),
    ("7月", 180),
    ("8月", 175),
]
for row in rows:
    ws.append(row)

# --- ここからがグラフ作成の本番 ---

# 1. グラフオブジェクトを作成 (今回は棒グラフ)
chart = BarChart()
chart.title = "月別売上推移"
chart.y_axis.title = "売上高(万円)"
chart.x_axis.title = "月"

# 2. データ系列の範囲をReferenceで指定 (B1:B6)
values = Reference(ws, min_col=2, min_row=1, max_col=2, max_row=6)
chart.add_data(values, titles_from_data=True)

# 3. カテゴリ軸の範囲をReferenceで指定 (A2:A6)
labels = Reference(ws, min_col=1, min_row=2, max_row=6)
chart.set_categories(labels)

# 4. ワークシートにグラフを追加 (D2セルを左上隅とする)
ws.add_chart(chart, "D2")

# 5. 最終的なExcelファイルを保存
wb.save("reference_chart_complete.xlsx")

このコードを実行してreference_chart_complete.xlsxを開くと、4月から8月までの売上データが正しく反映された棒グラフがD2セルから配置されているはずです。


まとめ

今回は、openpyxlでグラフを自動化する上で避けては通れないReferenceオブジェクトについて、その役割と具体的な使い方を解説しました。

最後に、重要なポイントを振り返りましょう。

  • Referenceオブジェクトは、グラフの元となるセル範囲を指定するための必須ツールです。
  • グラフの数値データ(棒の高さなど)は、Referenceを作成して**add_data()**で設定します。
  • グラフのラベルデータ(横軸の項目名など)は、別のReferenceを作成して**set_categories()**で設定します。
  • min_col, min_row, max_col, max_rowを使いこなすことで、ワークシート上のどんな範囲のデータも自由にグラフ化できます。

Referenceをマスターすれば、openpyxlを使ったグラフ自動化のレベルが格段に上がり、日々の定型業務が飛躍的に効率化します。ぜひ、今回のコードを参考に、ご自身の業務でも活用してみてください。

コメント

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