openpyxlで見やすいグラフを作成!NumericAxisの基本的な使い方とカスタマイズ術(初心者向け)

openpyxl

はじめに:Excelグラフの「軸」をPythonで操ろう

この記事を読むことで、Pythonライブラリopenpyxlを使ってExcelグラフの数値軸(NumericAxis)を自由自在にカスタマイズする方法が分かります。

openpyxlでグラフを作成したものの、「軸の範囲を調整したい」「目盛りをもっと細かくしたい」と感じたことはありませんか?デフォルトのグラフから一歩進んで、伝えたいことが一目でわかる、見やすいグラフを作成するスキルを身につけましょう。

この記事は、openpyxlでの基本的なグラフ作成が分かる方を対象に、NumericAxisクラスに焦点を当てて解説を進めます。


openpyxlのNumericAxisとは?

グラフの見た目を決める重要な要素「軸」

NumericAxisは、その名の通り、グラフの数値軸を操作するためのクラスです。棒グラフのY軸(縦軸)や散布図のX軸(横軸)・Y軸など、数値を扱う軸の様々な設定を変更できます。

openpyxl.chart.axis.NumericAxis として提供されており、グラフオブジェクトの .x_axis.y_axis プロパティ経由でアクセスするのが一般的です。

なぜ軸のカスタマイズが重要なのか?

軸をカスタマイズする最大のメリットは、グラフの可読性(見やすさ)を大幅に向上させられることです。

例えば、データの値が「100〜120」の範囲に集中しているのに、グラフの軸が「0〜200」で表示されていたら、データの微細な変化が分かりにくいですよね。

軸の最小値・最大値を適切に設定したり、目盛りの間隔を調整したりすることで、データの持つ意味や傾向をより正確に、そして直感的に伝えることが可能になります。


準備:openpyxlでカスタマイズの土台となるグラフを作成する

まずは、これからカスタマイズしていく元となる、シンプルな棒グラフをPythonコードで作成します。

openpyxlのインストール

openpyxlが未インストールの場合、以下のコマンドでインストールしてください。

pip install openpyxl

サンプルデータと棒グラフの作成

以下のコードは、月ごとの売上データを持つExcelファイルと、そのデータに基づいた棒グラフを生成します。このコードが出力したsales_chart_base.xlsxを元に、軸のカスタマイズを進めていきます。

from openpyxl import Workbook
from openpyxl.chart import BarChart, Reference

# 1. 新規ワークブックを作成し、アクティブなシートを選択
wb = Workbook()
ws = wb.active
ws.title = "月次売上"

# 2. グラフの元となるサンプルデータを書き込む
rows = [
    ["月", "売上"],
    ["1月", 110],
    ["2月", 135],
    ["3月", 120],
    ["4月", 150],
    ["5月", 142],
    ["6月", 160],
]

for row in rows:
    ws.append(row)

# 3. グラフオブジェクトを作成
chart = BarChart()
chart.type = "col" # 縦棒グラフ
chart.style = 10
chart.title = "2025年度 上半期売上"
chart.y_axis.title = "売上(万円)"
chart.x_axis.title = "月"

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

# 5. シートにグラフを追加し、ファイルを保存
ws.add_chart(chart, "E2")
wb.save("sales_chart_base.xlsx")

print("グラフ付きのExcelファイルを 'sales_chart_base.xlsx' として保存しました。")

このコードを実行すると、デフォルト設定の棒グラフが作成されます。Y軸(売上)が0から自動で設定されていることが確認できます。


NumericAxisの基本:軸の最大値・最小値を設定する

ここからが本題です。作成したグラフの軸をNumericAxisのプロパティを使って操作していきましょう。最もよく使われるのが、軸の表示範囲(最小値・最大値)の変更です。

Y軸(縦軸)の範囲を固定する (.y_axis.min, .y_axis.max)

Y軸の範囲を100から200に設定してみます。これにより、各月の売上の差がより分かりやすくなります。

chartオブジェクトのy_axisプロパティに続けて、.minで最小値、.maxで最大値を指定します。

# 先ほどのコードの chart.add_data の後に追加

# Y軸のカスタマイズ
chart.y_axis.min = 100
chart.y_axis.max = 200

# 5. シートにグラフを追加し、ファイルを保存
ws.add_chart(chart, "E2")
wb.save("sales_chart_minmax.xlsx")

このように数行追加するだけで、グラフのY軸の表示範囲が変わり、データの変動がより強調されるようになりました。

X軸(横軸)の範囲を固定する (.x_axis.min, .x_axis.max)

棒グラフでは通常X軸はカテゴリ軸ですが、散布図や折れ線グラフでX軸も数値の場合は、同様に.x_axis.min.x_axis.maxで範囲を指定できます。

# 散布図の場合の例
# chart.x_axis.min = 0
# chart.x_axis.max = 50

NumericAxisの応用:もっと見やすいグラフにするカスタマイズ術

最小値・最大値の設定以外にも、NumericAxisにはグラフをより洗練させるための多くの機能があります。ここでは代表的なものをいくつか紹介します。

目盛りの間隔を調整する (.majorUnit, .minorUnit)

軸の主目盛(ラベルが表示される線)と補助目盛(主目盛の間の細かい線)の間隔を設定できます。

.majorUnitプロパティで主目盛の間隔を指定します。例えば、Y軸の目盛りを20単位で表示したい場合は以下のように記述します。

# Y軸の主目盛を20単位に設定
chart.y_axis.majorUnit = 20

# Y軸の補助目盛を5単位に設定 (Excel上で補助目盛線を表示設定にすると見える)
chart.y_axis.minorUnit = 5

軸にタイトルを追加して情報を補う (.title)

軸が何を表す単位なのかを明記することは、グラフを分かりやすくするための基本です。.titleプロパティで簡単に設定できます。

# 準備コードで設定済みですが、改めて解説
chart.y_axis.title = "売上高(単位:万円)"
chart.x_axis.title = "対象月"

軸の数値を反転させる(降順にする) (.scaling.orientation)

通常、軸の数値は下から上(または左から右)へ増加しますが、これを反転させたい場合があります。.scaling.orientationプロパティを"maxMin"に設定することで、最大値と最小値の位置を入れ替えることができます。

# Y軸の数値を降順にする
chart.y_axis.scaling.orientation = "maxMin"

対数スケールで大きな値の差を見やすくする (.scaling.logBase)

扱うデータの中に、極端に大きな値と小さな値が混在している場合、通常の軸では小さな値の変動が見えなくなってしまいます。そのような場合に便利なのが対数スケールです。

.scaling.logBaseに底となる数(通常は10)を設定すると、軸が対数スケールに切り替わります。

# Y軸を対数スケール(底10)に設定
chart.y_axis.scaling.logBase = 10

これらの応用的なカスタマイズを組み合わせたコードの例を示します。

# ...(準備コードの chart.add_data の後に追加)...

# === Y軸のフルカスタマイズ ===
# 範囲設定
chart.y_axis.min = 100
chart.y_axis.max = 180

# タイトル設定
chart.y_axis.title = "売上高(単位:万円)"

# 目盛り設定
chart.y_axis.majorUnit = 20

# 交点設定 (X軸がY軸の100の位置で交差する)
chart.y_axis.crossAx = 100 # XAxis ID

# 5. シートにグラフを追加し、ファイルを保存
ws.add_chart(chart, "E2")
wb.save("sales_chart_advanced.xlsx")

まとめ:NumericAxisを使いこなし、伝わるグラフを作成しよう

今回は、openpyxlでグラフの数値軸を操作するNumericAxisクラスについて、その使い方を解説しました。

本記事のポイント:

  • NumericAxis はグラフの数値軸をカスタマイズするためのクラス
  • .min / .max で軸の表示範囲を簡単に設定できる
  • .majorUnit で目盛りの間隔を調整できる
  • .title で軸に分かりやすい名前を付けられる
  • .scaling プロパティで、軸の反転や対数スケールへの変更も可能

これらのテクニックを駆使することで、Excelで手作業するのと同等、あるいはそれ以上のグラフのカスタマイズがPythonコードだけで完結します。

ぜひあなたのデータ分析やレポート作成の自動化に、NumericAxisの活用を加えてみてください。

コメント

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