はじめに:openpyxlグラフの「見た目」はChartSpaceで決まる
Pythonのopenpyxlライブラリは、Excelファイルの読み書きを自動化する上で非常に強力なツールです。データの書き込みや計算式の埋め込みはもちろん、グラフの作成までPythonコードで完結できます。
しかし、openpyxlでグラフを作成した際に、こんな悩みに直面したことはないでしょうか?
- 「グラフは作れたけど、デザインが素っ気ない…」
- 「グラフのタイトルをもっと大きくしたいのに、方法がわからない」
- 「凡例の位置を自由に変えたい」
- 「レポートで使えるような、見栄えの良いグラフに自動で仕上げたい」
この記事は、まさにそうした悩みを解決するためのものです。
結論から言うと、openpyxlで作成するグラフの見た目(書式やレイアウト)のほとんどは、ChartSpaceというオブジェクトによって管理されています。
この記事を最後まで読めば、ChartSpaceの主要なプロパティを理解し、Excelグラフのタイトル、凡例、背景色、フォントなどをPythonコードで自由自在にカスタマイズする方法が身につきます。手作業でのグラフ整形から解放され、レポート品質のグラフ作成を完全に自動化しましょう!
ChartSpaceとは?グラフ全体を包むキャンバスを理解しよう
ChartSpaceの役割は、**グラフ全体を配置するための「キャンバス」や「土台」**です。
openpyxlでグラフを作成する際、私たちはまずBarChartやLineChartといった「グラフオブジェクト」を作成します。これは、グラフの棒や線、データを定義する、いわば「グラフの中身」です。
一方でChartSpaceは、そのグラフの中身を包む外側のすべてを管理します。
- グラフ全体のタイトル
- 凡例(データ系列の説明)
- プロットエリア(棒や線が描画される領域)
- グラフ全体の背景色や枠線
- グラフ内で使われるデフォルトのフォント
これらの要素は、Chartオブジェクト(例: BarChart)から.chartspaceという属性を辿ることでアクセスできます。グラフの「見た目」に関わる細かい調整を行いたい場合、このChartSpaceのプロパティを操作することが不可欠になるのです。
準備:カスタマイズの土台となる基本的なグラフを作成する
それでは、実際にChartSpaceを操作していく前に、カスタマイズの土台となるシンプルな棒グラフをPythonで作成しましょう。
今回使用するライブラリ(openpyxl)
まだopenpyxlをインストールしていない場合は、以下のコマンドでインストールしてください。
pip install openpyxlサンプルデータとExcelファイルの準備
今回は、以下のような月別の売上データを使ってグラフを作成します。
| 月 | 売上 |
| 1月 | 120 |
| 2月 | 150 |
| 3月 | 180 |
| 4月 | 160 |
| 5月 | 200 |
| 6月 | 210 |
基本的な棒グラフを作成するコード例
以下のコードは、上記のデータからシンプルな縦棒グラフを作成し、chart_sample.xlsxという名前で保存するものです。このコードが、以降のカスタマイズの出発点となります。
import openpyxl
from openpyxl.chart import BarChart, Reference
# 1. 新しいワークブックを作成
wb = openpyxl.Workbook()
ws = wb.active
ws.title = "売上レポート"
# 2. サンプルデータをシートに書き込む
rows = [
["月", "売上"],
["1月", 120],
["2月", 150],
["3月", 180],
["4月", 160],
["5月", 200],
["6月", 210],
]
for row in rows:
ws.append(row)
# 3. グラフオブジェクトを作成 (縦棒グラフ)
chart = BarChart()
chart.type = "col"
chart.style = 10 # スタイルを選択 (任意)
chart.title = "月別売上" # デフォルトのタイトル
chart.y_axis.title = "売上(万円)"
chart.x_axis.title = "月"
# 4. グラフのデータ範囲とカテゴリ範囲を指定
# データはB1セルからB7セルまで (ヘッダーを含む)
data = Reference(ws, min_col=2, min_row=1, max_row=7, max_col=2)
# カテゴリ(軸ラベル)はA2セルからA7セルまで
cats = Reference(ws, min_col=1, min_row=2, max_row=7, max_col=1)
# 5. データをグラフに追加
chart.add_data(data, titles_from_data=True)
chart.set_categories(cats)
chart.shape = 4 # グラフのサイズを調整 (任意)
# 6. グラフをシートに追加
ws.add_chart(chart, "D2") # D2セルを左上としてグラフを配置
# 7. Excelファイルを保存
wb.save("chart_sample.xlsx")
print("グラフを含むExcelファイルを作成しました。")このコードを実行すると、基本的なデザインのグラフが作成されたchart_sample.xlsxが出力されます。ここから、ChartSpaceの力を借りてこのグラフを洗練させていきましょう。
ChartSpaceプロパティ詳解:主要な要素をコードで操る
ここからは、グラフオブジェクトのchartspace属性を通じて、グラフの各要素をカスタマイズする方法を具体的に見ていきます。先ほどのコードの# 7. Excelファイルを保存の直前に、これから紹介するコードを追加していくことで、変更を確認できます。
H3: グラフタイトルの詳細設定 (title)
タイトルの文字列だけでなく、フォントサイズや色も変更できます。 chart.titleは単なる文字列ですが、より詳細な設定はchart.chartspace.titleから行います。ただし、タイトルオブジェクトは少し深い階層にあるため、注意が必要です。
# --- グラフタイトルの詳細設定 ---
from openpyxl.drawing.text import Font, CharacterProperties
# chart.title は単なる文字列のため、詳細設定は chartspace 経由で行う
cs = chart.chartspace
# タイトルオブジェクトへの参照
title_obj = cs.title
if title_obj:
# テキストプロパティ (txPr) を取得
tp = title_obj.tx.rich.p[0].r[0]
# キャラクタープロパティ (rPr) でフォントを設定
tp.rPr = CharacterProperties(
latin=Font(typeface='游ゴシック'), # フォントの種類
sz=1800, # フォントサイズ (18pt = 1800)
b=True, # 太字 (Bold)
solidFill="00008B" # 文字色 (濃い青)
)sz=1800は18ptを意味します。ポイント数の100倍の値を指定するのがopenpyxlのルールです。
H3: 凡例の位置と書式設定 (legend)
凡例の位置を制御するのは非常に簡単です。 chart.legend.positionプロパティに、位置を示す文字列を指定します。
'r'(right): 右'l'(left): 左't'(top): 上'b'(bottom): 下'tr'(topRight): 右上
凡例が不要な場合はchart.legend = Noneとします。
# --- 凡例の位置と書式設定 ---
if chart.legend:
chart.legend.position = 'b' # 凡例をグラフの下に配置H3: プロットエリアの背景と枠線 (plotArea)
プロットエリアは、棒グラフや折れ線グラフが実際に描画される領域です。 このエリアの背景色や枠線をchart.plot_area.spPr(Shape Properties)で設定できます。
# --- プロットエリアの書式設定 ---
from openpyxl.drawing.properties import GraphicalProperties
from openpyxl.drawing.line import LineProperties
# プロットエリアの書式設定 (spPr) を取得
pa_spPr = chart.plot_area.spPr or GraphicalProperties()
# 背景を薄いグレーで塗りつぶし
pa_spPr.solidFill = "F2F2F2" # 色コードで指定
# 枠線をなしに設定
pa_spPr.ln = LineProperties(noFill=True)
chart.plot_area.spPr = pa_spPrH3: グラフ全体の書式とレイアウト (spPr, txPr)
グラフエリア全体(タイトルや凡例を含む外枠)の背景やフォントも設定できます。
# --- グラフ全体の書式とレイアウト ---
# グラフエリア全体の書式設定 (spPr) を取得
chart_spPr = chart.graphical_properties or GraphicalProperties()
# グラフエリア全体の枠線を設定 (細い灰色の線)
chart_spPr.ln = LineProperties(solidFill="D9D9D9", w=7500) # wは線の太さ
chart.graphical_properties = chart_spPrH3: ちょっとした見た目の調整 (rounded_corners)
グラフエリアの角を丸めるだけで、少し柔らかい印象を与えることができます。 これはboolean値で設定するだけの簡単なプロパティです。
# --- グラフの角を丸くする ---
chart.rounded_corners = True実践:ChartSpaceを使ってレポート風グラフに仕上げる
それでは、これまで紹介したプロパティ設定をすべて組み合わせて、ビジネスレポートでそのまま使えるような、少し洗練されたデザインのグラフを作成してみましょう。
準備セクションで作成した基本コードの# 6. グラフをシートに追加と# 7. Excelファイルを保存の間に、以下のカスタマイズコードをまとめて挿入します。
# ---------------------------------------------------
# ここからがChartSpaceを使ったカスタマイズコード
# ---------------------------------------------------
from openpyxl.drawing.text import Font, CharacterProperties
from openpyxl.drawing.properties import GraphicalProperties
from openpyxl.drawing.line import LineProperties
# 1. グラフタイトルの詳細設定
cs = chart.chartspace
title_obj = cs.title
if title_obj:
tp = title_obj.tx.rich.p[0].r[0]
tp.rPr = CharacterProperties(
latin=Font(typeface='游ゴシック'),
sz=1800, # 18pt
b=True,
solidFill="00008B"
)
# 2. 凡例を下に配置
if chart.legend:
chart.legend.position = 'b'
# 3. プロットエリアの背景を薄いグレーに、枠線はなし
pa_spPr = chart.plot_area.spPr or GraphicalProperties()
pa_spPr.solidFill = "F2F2F2"
pa_spPr.ln = LineProperties(noFill=True)
chart.plot_area.spPr = pa_spPr
# 4. グラフ全体の枠線を設定
chart_spPr = chart.graphical_properties or GraphicalProperties()
chart_spPr.ln = LineProperties(solidFill="D9D9D9", w=7500)
chart.graphical_properties = chart_spPr
# 5. グラフの角を丸める
chart.rounded_corners = True
print("グラフのカスタマイズが完了しました。")
# ---------------------------------------------------
# カスタマイズコードはここまで
# ---------------------------------------------------このコードを実行してchart_sample.xlsxを開くと、デフォルトの状態から格段に見栄えが良くなったグラフが確認できるはずです。
まとめ:ChartSpaceを使いこなし、グラフ作成をネクストレベルへ
今回は、openpyxlにおけるグラフの見た目を司るChartSpaceオブジェクトに焦点を当て、その主要なプロパティを操作する方法を解説しました。
最後に、この記事の重要ポイントを振り返りましょう。
ChartSpaceはグラフ全体のデザインを管理する「キャンバス」である。- グラフのタイトル、凡例、プロットエリア、背景色、枠線といった細かい見た目の設定は、
ChartSpace関連のプロパティからアクセスする。 sz=1800(18pt)のように、openpyxl特有の単位の指定方法がある。- これらのプロパティを組み合わせることで、手作業を介さずに、レポート品質のグラフをPythonコードだけで自動生成できる。
openpyxlでのグラフ作成は、単にデータを可視化するだけでなく、その「見せ方」までをも自動化できる点が大きな魅力です。今回紹介した内容はChartSpaceの機能のほんの一部ですが、これらを使いこなすだけでも、あなたのExcel自動化スキルは間違いなく一段階レベルアップするでしょう。
ぜひ、ご自身の業務やプロジェクトで活用してみてください!


コメント