はじめに – なぜopenpyxlでグラフを自動化するのか?
Pythonを使った業務効率化の中でも、特にニーズが高いのがExcel操作の自動化です。定型的なレポート作成やデータ集計を自動化できれば、大幅な時間短縮に繋がります。
その中でもグラフ作成は、視覚的にデータを伝えるための重要な工程ですが、手作業では意外と手間がかかるもの。もし、Pythonコードを実行するだけで、データに基づいた最新のグラフが挿入されたExcelファイルが完成したら、素晴らしいと思いませんか?
openpyxlライブラリを使えば、まさにそれが可能になります。特に、3つの量的データを一つのグラフで表現できるバブルチャートは、マーケティングのポジショニング分析や科学技術計算の結果表示など、多様なシーンで活躍します。
この記事で学べること
この記事では、openpyxl.chartモジュールの中でもBubbleChartクラスに焦点を当て、その基本的な使い方から応用的なカスタマイズ方法までを、具体的なステップとサンプルコードで解説します。
BubbleChartオブジェクトの基本的な作成・設定方法- Excelシート上のデータをグラフに紐付ける
ReferenceとSeriesの使い方 - タイトルや軸ラベル、スタイルなどを調整して見やすいグラフにする方法
対象読者
- PythonでExcelのレポート作成を自動化したい方
openpyxlの基本的なセル操作はできるが、グラフ作成は初めての方- バブルチャートをプログラムで作成する方法を探している方
それでは、早速始めていきましょう。
準備:環境構築とopenpyxlのインストール
まず、openpyxlライブラリを使えるように、自身の開発環境にインストールします。
openpyxlとは?
openpyxlは、Pythonで.xlsx形式のExcelファイルを読み書きするためのデファクトスタンダード・ライブラリです。 このライブラリを使うことで、Excelアプリケーションを直接操作することなく、PythonスクリプトだけでExcelファイルのほぼすべての要素(セル、数式、スタイル、そしてグラフなど)を制御できます。
2010年以降のExcelファイル形式(Office Open XML)に対応しており、幅広いバージョンで利用可能です。
コマンドによるインストール方法
openpyxlのインストールは、Pythonのパッケージ管理ツールpipを使います。お使いのターミナルやコマンドプロンプトで、以下の1行を実行するだけです。
pip install openpyxlもし、すでに古いバージョンがインストールされている場合は、以下のコマンドで最新版にアップデートすることをおすすめします。
pip install --upgrade openpyxlインストールが成功すれば、準備は完了です。
BubbleChartの基本的な使い方(実装ステップ)
ここからは、実際にバブルチャートを作成する手順を6つのステップに分けて、順を追って解説します。
Step 1: データの準備とワークブックの作成
何よりもまず、グラフの元になるデータが必要です。今回は、架空の製品データ(価格、販売数、市場シェア)を例に、新しいExcelワークブックを作成し、データを書き込むところから始めます。
import openpyxl
# 新しいワークブックとアクティブなシートを作成
wb = openpyxl.Workbook()
ws = wb.active
ws.title = "BubbleChart Usage"
# グラフの元になるデータをリストで定義
# ヘッダー: 製品名, 価格(X軸), 販売数(Y軸), シェア(バブルサイズ)
data_rows = [
("製品", "価格", "販売数", "シェア"),
("プロダクトA", 3000, 120, 15),
("プロダクトB", 4500, 90, 30),
("プロダクトC", 6000, 60, 45),
("プロダクトD", 8000, 40, 10),
("プロダクトE", 5200, 75, 22),
]
# シートにデータを書き込む
for row in data_rows:
ws.append(row)このコードは、A1セルからD6セルにかけて、上記の製品データを入力します。
Step 2: BubbleChartオブジェクトのインスタンス化
次に、バブルチャート自体を表すオブジェクトを作成します。openpyxl.chartモジュールからBubbleChartクラスをインポートし、そのインスタンスを生成します。
from openpyxl.chart import BubbleChart, Reference, Series
# BubbleChartオブジェクトを作成(インスタンス化)
chart = BubbleChart()この時点ではchartは空っぽのグラフオブジェクトです。ここにデータと設定を加えていきます。
Step 3: Referenceでデータ範囲を指定する
グラフに描画したいデータがExcelシートのどの範囲にあるかをopenpyxlに教える必要があります。そのために使うのがReferenceクラスです。
Referenceは、ワークシートオブジェクトと、データの範囲(最小/最大の行・列番号)を引数に取ります。
# X軸のデータ範囲(B2セルからB6セル)
x_values = Reference(ws, min_col=2, min_row=2, max_row=6)
# Y軸のデータ範囲(C2セルからC6セル)
y_values = Reference(ws, min_col=3, min_row=2, max_row=6)
# バブルサイズのデータ範囲(D2セルからD6セル)
size_values = Reference(ws, min_col=4, min_row=2, max_row=6)ポイント: min_row=2としているのは、1行目のヘッダー(”価格”, “販売数”など)をデータ範囲から除外するためです。
Step 4: SeriesにX軸、Y軸、サイズを設定する
Referenceで指定した各データ範囲を、一つの「系列(Series)」としてまとめます。Seriesオブジェクトは、グラフにプロットされる一連のデータセットです。
# データ系列を定義する
# valuesがY軸、xvaluesがX軸、zvaluesがバブルサイズに対応
series = Series(values=y_values, xvalues=x_values, zvalues=size_values, title="製品群")
# 作成した系列をチャートオブジェクトに追加
chart.append(series)BubbleChartの場合、Y軸データをvalues引数に、バブルサイズのデータをzvalues引数に指定するという点が特徴的です。title引数は、グラフの凡例に表示される名前となります。
Step 5: チャートの基本属性(タイトル・軸ラベル)を設定する
データだけのグラフでは、何を表しているのか伝わりません。グラフ全体のタイトルや、各軸が何を示しているのかを明確にするラベルを設定しましょう。
# グラフのタイトルを設定
chart.title = "製品ポートフォリオ"
# X軸のタイトルを設定
chart.x_axis.title = "価格(円)"
# Y軸のタイトルを設定
chart.y_axis.title = "販売数(個)"これらの設定により、グラフの可読性が格段に向上します。
Step 6: add_chartでシートにグラフを追加する
最後に、完成したチャートオブジェクトをワークシートに追加します。ws.add_chart()メソッドの第二引数に、グラフの左上角を配置したいセルの番地を文字列で指定します。
# F2セルを左上隅としてチャートをシートに追加
ws.add_chart(chart, "F2")
# すべての変更をExcelファイルとして保存
wb.save("bubble_chart_manual.xlsx")これで、指定した場所にバブルチャートが描画されたExcelファイルが生成されます。
サンプルコード全体
ここまでのステップを統合した、コピー&ペーストで実行可能な完全なコードです。
import openpyxl
from openpyxl.chart import BubbleChart, Reference, Series
# --- Step 1: データの準備とワークブックの作成 ---
wb = openpyxl.Workbook()
ws = wb.active
ws.title = "BubbleChart Usage"
data_rows = [
("製品", "価格", "販売数", "シェア"),
("プロダクトA", 3000, 120, 15),
("プロダクトB", 4500, 90, 30),
("プロダクトC", 6000, 60, 45),
("プロダクトD", 8000, 40, 10),
("プロダクトE", 5200, 75, 22),
]
for row in data_rows:
ws.append(row)
# --- Step 2: BubbleChartオブジェクトのインスタンス化 ---
chart = BubbleChart()
# --- Step 3: Referenceでデータ範囲を指定 ---
x_values = Reference(ws, min_col=2, min_row=2, max_row=len(data_rows))
y_values = Reference(ws, min_col=3, min_row=2, max_row=len(data_rows))
size_values = Reference(ws, min_col=4, min_row=2, max_row=len(data_rows))
# --- Step 4: SeriesにX軸、Y軸、サイズを設定 ---
series = Series(values=y_values, xvalues=x_values, zvalues=size_values, title="製品群")
chart.append(series)
# --- Step 5: チャートの基本属性(タイトル・軸ラベル)を設定 ---
chart.title = "製品ポートフォリオ"
chart.x_axis.title = "価格(円)"
chart.y_axis.title = "販売数(個)"
# --- Step 6: add_chartでシートにグラフを追加 ---
ws.add_chart(chart, "F2")
wb.save("bubble_chart_manual.xlsx")
print("バブルチャートを持つExcelファイル 'bubble_chart_manual.xlsx' を作成しました。")BubbleChartの応用的なカスタマイズ
基本的な作成方法をマスターしたら、次はより表現力豊かなグラフにするためのカスタマイズ方法を見ていきましょう。
BubbleChart3Dでグラフを3D化する
グラフに奥行きを持たせて立体的に見せたい場合、BubbleChartの代わりにBubbleChart3Dクラスを使用します。使い方は驚くほど簡単で、インスタンス化するクラス名を変更するだけです。
from openpyxl.chart import BubbleChart3D # BubbleChart3Dをインポート
# 3Dのバブルチャートオブジェクトを作成
chart = BubbleChart3D()
# 以降のコード (Reference, Series, add_chartなど) は全く同じこれだけで、バブルが球体のように見える3Dグラフを作成できます。
チャートのスタイルやサイズ、位置を調整する方法
作成されるグラフのデザインや大きさもコードから制御可能です。
- スタイル変更:
chart.styleプロパティに1から48までの整数値を設定することで、Excelに組み込まれているデザインテンプレートを適用できます。Pythonchart.style = 26 # 好みのスタイル番号を設定 - サイズ変更:
chart.width(幅)とchart.height(高さ)プロパティで、グラフの物理的な大きさをcm単位で指定できます。Pythonchart.width = 25 # 幅を25cmに chart.height = 15 # 高さを15cmに - 位置変更:
ws.add_chart(chart, "F2")のセル番地を変更すれば、グラフの配置場所を自由に変更できます。
複数のデータ系列(Series)を追加する方法
異なるカテゴリのデータを同じグラフ上にプロットしたい場合もあるでしょう。その場合は、カテゴリごとにSeriesオブジェクトを作成し、それぞれをchart.append()で追加します。
# (例) 新規事業のデータ系列を追加する場合
new_x_values = Reference(ws, min_col=2, min_row=7, max_row=8)
new_y_values = Reference(ws, min_col=3, min_row=7, max_row=8)
new_size_values = Reference(ws, min_col=4, min_row=7, max_row=8)
series2 = Series(values=new_y_values, xvalues=new_x_values, zvalues=new_size_values, title="新規事業製品")
# 2つ目の系列をチャートに追加
chart.append(series2)これにより、凡例が2つ表示され、異なる色のバブルが同じグラフ内に描画されます。
まとめ – BubbleChart作成の重要ポイント
今回は、Pythonのopenpyxlライブラリを用いて、Excelのバブルチャートをプログラムで作成する方法を解説しました。
最後に、BubbleChart作成における重要なポイントをまとめます。
BubbleChart()でグラフオブジェクトの土台を作る。Reference()でX軸、Y軸、バブルサイズに対応するシート上のセル範囲をそれぞれ指定する。Series()で3つのReferenceオブジェクトを一つのデータ系列にまとめ、グラフに追加(append)する。.titleや.x_axis.titleなどのプロパティを操作して、グラフを分かりやすく修飾する。add_chart()でワークシートの好きな位置に配置する。
この流れを理解すれば、面倒なグラフ作成作業を自動化し、データ分析やレポート作成の効率を飛躍的に向上させることができます。ぜひ、ご自身の業務でも活用してみてください。


コメント