【初心者OK】Python×openpyxlでExcelにグラフを描く方法を図解で解説!

はじめに

「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

コメント

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