openpyxl.chart.axisを使いこなす!PythonでExcelグラフの軸を自由自在に操る方法

openpyxl

Pythonとopenpyxlを使えば、Excelのグラフ作成を自動化できて非常に便利ですよね。しかし、openpyxlで単純にグラフを作成しただけだと、「軸のタイトルがない」「目盛の範囲がしっくりこない」「数値のフォーマットを整えたい」といった、細かな調整を手作業で行っている方も多いのではないでしょうか。

実は、その悩み、openpyxl.chart.axisモジュールを理解することで全て解決できます。

この記事では、openpyxlにおけるグラフの軸(Axis)を徹底的に深掘りし、基本的な設定から応用的なデザインカスタマイズまで、あなたが「自由自在に操れる」ようになるための方法を具体的なコードと共に解説します。

この記事を読めば、以下のことが可能になります。

  • グラフのX軸・Y軸に、タイトルや単位を明確に表示できる
  • データの見せ方に合わせて、軸の最小値・最大値をプログラムから制御できる
  • 目盛の間隔や、数値を「通貨」や「パーセント」形式で表示できる
  • 手作業でのグラフ整形から完全に解放され、レポート作成の完全自動化が実現できる

さあ、openpyxl.chart.axisをマスターして、ワンランク上のExcel自動化スキルを身につけましょう!

はじめに:なぜopenpyxl.chart.axisの理解が重要なのか

グラフの軸は、データの「文脈」を伝える上で最も重要な要素です。 軸が正しく設定されていなければ、どれだけ見栄えの良いグラフを作っても、その価値は半減してしまいます。

openpyxl.chart.axisは、このグラフの軸をプログラム上から操作するための専用の機能群です。これを使いこなせるかどうかで、自動生成されるExcelファイルのクオリティが劇的に変わります。

最初は少し複雑に感じるかもしれませんが、一度構造を理解してしまえば、あとはプロパティを設定していくだけです。この記事でその構造を一つずつ丁寧に解き明かしていくので、ご安心ください。 本記事では、openpyxl 3.0.0以降のバージョンで広く利用できる方法を紹介します。

openpyxl.chart.axisの基本構造を理解する

何事もまずは基本構造の理解から。 openpyxlがグラフと軸をどのように管理しているかを知ることで、この後のコードがスムーズに頭に入ってきます。

ChartオブジェクトとAxisオブジェクトの関係性

openpyxlでは、グラフ全体をLineChartBarChartなどの**Chartオブジェクト**で扱います。そして、グラフのX軸とY軸は、それぞれChartオブジェクトのプロパティとして保持されています。

  • X軸 (横軸): chart.x_axis
  • Y軸 (縦軸): chart.y_axis
from openpyxl.chart import LineChart

# グラフオブジェクトを作成
chart = LineChart()

# 軸オブジェクトを取得
x_axis = chart.x_axis
y_axis = chart.y_axis

# これら x_axis, y_axis のプロパティを今後変更していく

このように、chartオブジェクトを起点に.x_axis.y_axisと記述することで、目的の軸オブジェクトにアクセスするのが基本となります。

数値軸 (ValueAxis) と項目軸 (CategoryAxis) の役割分担

グラフの軸には、主に2つの種類があります。openpyxlはグラフの種類に応じてこれらを適切に割り当ててくれます。

  • ValueAxis (数値軸):
    • 売上高や気温、数量など、連続的な数値を扱う軸です。
    • 一般的にY軸として使われます。
    • 最小値・最大値や目盛間隔といった、数値特有の設定を持ちます。
  • CategoryAxis (項目軸):
    • 月、商品名、担当者名など、**区切りのある項目(カテゴリ)**を扱う軸です。
    • 一般的にX軸として使われます。

この違いを意識しておくと、「この設定はどちらの軸に適用すべきか」が判断しやすくなります。

【基本操作】まずはここから!軸のタイトルと範囲を設定する

それでは、実際にコードを書きながら最もよく使う基本操作をマスターしましょう。 ここでは、以下のサンプルデータとグラフをベースに解説を進めます。

import openpyxl
from openpyxl.chart import LineChart, Reference

# --- ベースとなるExcelファイルとグラフの準備 ---
wb = openpyxl.Workbook()
ws = wb.active
ws.title = "AxisMaster"

# サンプルデータを書き込む
rows = [
    ["Month", "Sales"],
    ["1月", 120],
    ["2月", 155],
    ["3月", 182],
    ["4月", 167],
    ["5月", 215],
    ["6月", 250],
]
for row in rows:
    ws.append(row)

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

# グラフのデータ範囲を指定
data = Reference(ws, min_col=2, min_row=1, max_col=2, max_row=7)
cats = Reference(ws, min_col=1, min_row=2, max_row=7)
chart.add_data(data, titles_from_data=True)
chart.set_categories(cats)

ws.add_chart(chart, "D2")
# --- ここまでは準備 ---

title プロパティで軸ラベルを明確にする(X軸・Y軸)

軸が何を表しているのかを示すタイトルは必須です。.titleプロパティに文字列を代入するだけで設定できます。

# X軸にタイトルを設定
chart.x_axis.title = "月"

# Y軸にタイトルを設定
chart.y_axis.title = "売上 (万円)"

たったこれだけで、グラフの可読性は格段に向上します。

scaling オブジェクトで最小値・最大値を制御する方法

データの見せ方を調整したい場合、軸の範囲(最小値・最大値)を変更します。これは主にValueAxis(Y軸)に対して行い、.scalingという特別なオブジェクトを介して設定します。

# Y軸の範囲を 0 から 300 に設定
chart.y_axis.scaling.min = 0
chart.y_axis.scaling.max = 300

chart.y_axis.min = 0ではない点に注意してください。必ず.scalingを間に挟むのがポイントです。

実践コード:基本的な折れ線グラフの軸を設定する

ここまでの内容を反映したコードです。

# (上記の準備コードの続き)

# --- 軸の基本設定 ---
# X軸のタイトル
chart.x_axis.title = "月"

# Y軸のタイトル
chart.y_axis.title = "売上 (万円)"

# Y軸の範囲 (Scalingオブジェクト経由で設定)
chart.y_axis.scaling.min = 0
chart.y_axis.scaling.max = 300

# ファイルを保存
wb.save("basic_axis_chart.xlsx")

このスクリプトを実行すれば、タイトルと範囲が設定された見やすいグラフが作成されます。

【中級編】目盛 (Unit) と表示形式 (number_format) を操る

基本的な設定ができたら、次はより細かな「目盛」と「表示形式」をカスタマイズしていきましょう。

majorUnit / minorUnit で目盛間隔を調整する

Y軸の目盛が細かすぎたり、粗すぎたりする場合、.majorUnitで主目盛の間隔を指定できます。

# Y軸の主目盛を50単位にする
chart.y_axis.majorUnit = 50

# 補助目盛も設定可能
# chart.y_axis.minorUnit = 10

これを設定すると、Y軸のラベルが「0, 50, 100, 150…」のように表示され、グラフがスッキリします。

number_format で数値を「通貨」や「パーセント」にフォーマットする

軸の数値をそのまま表示するのではなく、Excelのセルのように書式を整えたい場合は.number_formatが役立ちます。

# Y軸の数値を3桁区切りの通貨形式にする
chart.y_axis.number_format = '#,##0'

# 例: パーセンテージ表示にしたい場合
# chart.y_axis.number_format = '0.00%'

# 例: 日本円の通貨記号をつけたい場合
# chart.y_axis.number_format = '"¥"#,##0'

crossesAt で軸の交点を指定する

X軸とY軸がどこで交差するかを指定します。マイナスの値を含むグラフで、0の位置を明確にしたい場合に便利です。

# X軸が、Y軸の値が0の位置で交わるように設定
chart.y_axis.crossesAt = 0

【応用編】見栄えを向上させる高度なデザインカスタマイズ

ここからは、線の色やフォントといった、よりデザインに踏み込んだカスタマイズ方法を紹介します。コードは少し複雑になりますが、コピー&ペーストで活用できます。

線のスタイルを変更・非表示にする (spPr と LineProperties)

軸の線自体を非表示にしたり、色を変えたりできます。これにはLinePropertiesをインポートして使います。

from openpyxl.drawing.line import LineProperties

# Y軸の線を非表示にする
# spPr は "Shape Properties" の略
chart.y_axis.spPr.ln = LineProperties(noFill=True)

# X軸の線の色をグレーにする
# line_props = LineProperties(solidFill="808080")
# chart.x_axis.spPr.ln = line_props

フォントサイズや文字色を変更する (txPr と CharacterProperties)

軸ラベルやタイトルのフォントをカスタマイズするには、CharacterPropertiesを使います。

from openpyxl.drawing.text import CharacterProperties, Font

# Y軸のラベルのフォントを太字、サイズ10pt、色を青(0000FF)にする
# txPr は "Text Properties" の略
font = Font(typeface='Meiryo UI') # フォントを指定
# szはポイント数の100倍、b=Trueは太字
cp = CharacterProperties(latin=font, sz=1000, b=True, solidFill="0000FF") 
chart.y_axis.txPr = cp

軸の向きを反転させる (scaling.orientation)

通常は値が小さい方から大きい方へ向かう軸の向きを、反転させることができます。

# Y軸の向きを反転 (上が最小値、下に行くほど最大値になる)
chart.y_axis.scaling.orientation = "maxMin"

# 元に戻す場合は "minMax"
# chart.y_axis.scaling.orientation = "minMax"

【実践サンプル】複数のカスタマイズを組み合わせたグラフ作成例

最後に、これまで紹介したテクニックをすべて組み合わせた、実用的なレポート用グラフを作成するコードを紹介します。

要件定義:見やすい売上レポートグラフを作る

  • タイトル: Y軸は「売上高(百万円)」、X軸は「2025年度 上半期」
  • 範囲: Y軸は0〜300百万円
  • 目盛: Y軸の主目盛は50単位
  • 書式: Y軸の数値は3桁区切り
  • デザイン: Y軸の線は非表示、X軸のタイトルは太字

完成コード:タイトル、範囲、目盛、書式をすべて設定

import openpyxl
from openpyxl.chart import LineChart, Reference
from openpyxl.drawing.line import LineProperties
from openpyxl.drawing.text import CharacterProperties, Font

# --- ベースの準備 (省略) ---
# (上記と同じワークブック、シート、データ、グラフオブジェクト作成処理)
wb = openpyxl.Workbook()
ws = wb.active
ws.title = "AxisMaster"
rows = [
    ["Month", "Sales"], ["1月", 120], ["2月", 155], ["3月", 182],
    ["4月", 167], ["5月", 215], ["6月", 250],
]
for row in rows:
    ws.append(row)
chart = LineChart()
chart.title = "月別売上推移"
data = Reference(ws, min_col=2, min_row=1, max_col=2, max_row=7)
cats = Reference(ws, min_col=1, min_row=2, max_row=7)
chart.add_data(data, titles_from_data=True)
chart.set_categories(cats)
ws.add_chart(chart, "D2")
# --- ここからが軸のフルカスタマイズ ---

# 1. タイトル設定
chart.x_axis.title = "2025年度 上半期"
chart.y_axis.title = "売上高 (百万円)"

# 2. Y軸の範囲設定
chart.y_axis.scaling.min = 0
chart.y_axis.scaling.max = 300

# 3. Y軸の目盛間隔
chart.y_axis.majorUnit = 50

# 4. Y軸の表示形式
chart.y_axis.number_format = '#,##0'

# 5. デザインカスタマイズ (応用)
# Y軸の線を非表示に
chart.y_axis.spPr.ln = LineProperties(noFill=True)
# X軸のタイトルを太字に
font_bold = Font(typeface='Meiryo UI')
cp_bold = CharacterProperties(latin=font_bold, b=True)
chart.x_axis.title.tx.rich.p[0].r.rPr = cp_bold

# ファイルを保存
wb.save("full_custom_axis_chart.xlsx")

このコードを実行すれば、手作業での修正が一切不要な、完成されたレポート用グラフが一瞬で出来上がります。

まとめ:openpyxl.chart.axisをマスターして、データ可視化を自動化しよう

今回は、Pythonのopenpyxlライブラリにおけるchart.axisモジュールの使い方を、基本から応用まで網羅的に解説しました。

重要なポイントをもう一度おさらいしましょう。

  • 基本アクセス: chart.x_axischart.y_axisで軸オブジェクトを取得する。
  • 基本設定: .titleでタイトル、.scaling.min/.maxで範囲を設定する。
  • 中級設定: .majorUnitで目盛間隔、.number_formatで表示形式を整える。
  • 応用設定: spPrtxPrを使いこなせば、デザインも自由自在。

openpyxl.chart.axisは、あなたのExcel自動化スクリプトの価値を飛躍的に高める強力な武器です。ぜひ、この記事のコードを参考に、あなたの業務でも活用してみてください。

コメント

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