はじめに: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 = 50NumericAxisの応用:もっと見やすいグラフにするカスタマイズ術
最小値・最大値の設定以外にも、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の活用を加えてみてください。


コメント