もう迷わない!openpyxlのTextAxis入門 – グラフ軸ラベルのカスタマイズ方法をサンプルコード付きで解説

openpyxl

はじめに:openpyxlで「なんかダサい」グラフから卒業しよう

Pythonライブラリのopenpyxlは、Excelファイルを自動操作する上で非常に強力なツールです。特に、データからグラフを自動生成する機能は、レポート作成の自動化などで重宝します。

しかし、デフォルト設定でグラフを作成すると、「軸の文字が小さくて読みづらい」「ラベル名が長すぎて重なってしまう」といった、見た目の問題に直面することがよくあります。

この記事を読めば、openpyxlTextAxisクラスを使いこなし、グラフの軸ラベル(カテゴリ名など)の見た目を自由自在にカスタマイズできるようになります。

具体的には、以下のようなカスタマイズ方法を、初心者の方にも分かりやすくサンプルコード付きで解説します。

  • 軸ラベルのフォントサイズや色の変更
  • 軸ラベルの太字・イタリック設定
  • 軸ラベルの向き(角度)の調整

手作業での「見た目調整」から卒業し、Pythonコードだけで完結する美しいグラフ作成を目指しましょう。

準備:openpyxlのインストールとグラフの元データ作成

まずは、解説を進めるための準備をします。 openpyxlがインストールされていない場合は、以下のコマンドでインストールしてください。

pip install openpyxl

次に、今回の解説で使用する簡単なExcelデータと、基本的な棒グラフを作成するPythonコードを準備します。このコードを実行すると、グラフの元となるreport.xlsxというファイルが作成されます。

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

# 1. 新しいワークブックを作成
wb = Workbook()
ws = wb.active
ws.title = "月次売上レポート"

# 2. サンプルデータをシートに追加
rows = [
    ["商品カテゴリ", "売上"],
    ["家庭用電化製品", 15000],
    ["スマートフォン・アクセサリ", 22000],
    ["PC・周辺機器", 18000],
    ["オーディオ・ビジュアル機器", 12000],
    ["キッチン用品", 9000],
]

for row in rows:
    ws.append(row)

# 3. ファイルを保存(この時点ではグラフはまだない)
wb.save("report.xlsx")

この時点ではまだグラフはなく、データが入力されただけのExcelファイルが作られます。このファイルに対して、これから軸をカスタマイズしたグラフを追加していきます。

openpyxlのTextAxisとは?グラフの「文字の軸」を操る司令塔

結論から言うと、TextAxisはグラフの軸の中でも、文字列やカテゴリ名が表示される軸(カテゴリ軸)の書式設定を担当するクラスです。

Excelのグラフの軸には、主に以下の種類があり、openpyxlではそれぞれに対応するクラスが用意されています。

  • TextAxis (or CategoryAxis): カテゴリ軸。今回の例では「家庭用電化製品」などの商品名が並ぶ軸です。
  • NumericAxis (or ValueAxis): 数値軸。売上金額など、数値の大小を表す軸です。
  • DateAxis: 日付軸。時系列データを扱う際に使われます。

これらのクラスを適切に使い分けることで、グラフの各要素を詳細に設定できます。今回は、商品カテゴリ名が表示されるX軸(横軸)を対象に、TextAxisの使い方をマスターしていきましょう。

TextAxisの基本:軸オブジェクトを取得してプロパティを設定する流れ

TextAxisの各設定を変更するには、まず目的の軸オブジェクトにアクセスする必要があります。

chart.x_axischart.y_axisといった属性から、目的の軸オブジェクトにアクセスするのが基本です。

グラフを作成した後、以下のようにして軸オブジェクトにアクセスし、そのプロパティを変更していきます。

# (グラフオブジェクト chart を作成した後...)

# X軸(今回はTextAxis)を取得
x_axis = chart.x_axis

# Y軸(今回はNumericAxis)を取得
y_axis = chart.y_axis

# これ以降、x_axisのプロパティを様々に設定していく
# 例: x_axis.プロパティ名 = 設定値

今回の棒グラフでは、X軸がカテゴリ(商品名)なのでchart.x_axisTextAxisオブジェクトに対応します。このx_axisオブジェクトが持つ様々なプロパティを書き換えることで、見た目をカスタマイズしていくのが基本的な流れです。

実践!TextAxisを使った軸ラベルのカスタマイズレシピ集

ここからは、具体的なカスタマイズ方法をレシピ形式で紹介します。よく使われるものから順番に見ていきましょう。

レシピ1:軸ラベルのフォントサイズと色を変える

軸ラベルのフォント関連の操作は、axis.fontオブジェクトのプロパティで行います。

フォントを扱うためには、openpyxl.drawing.text.Fontクラスをインポートする必要があります。

# --- 必要なクラスのインポート ---
from openpyxl.drawing.text import Font
from openpyxl.drawing.colors import ColorChoice

# --- (chart.x_axis を取得した後) ---

# フォントの色を赤に設定
# schemeClr の val には 'tx1'(黒), 'lt1'(白), 'accent1'~'accent6' などのテーマカラーを指定
# srgbClr で直接RGB値を指定することも可能
color = ColorChoice(prstClr="red") # prstClrで定義済みの色名を指定

# フォントオブジェクトを作成
# szでサイズ(ポイント*100), bで太字, iでイタリック, uで下線を指定
custom_font = Font(typeface='メイリオ', sz=1050, b=False, i=False, u='none')
custom_font.color = color

# 軸のフォントに適用
chart.x_axis.font = custom_font
  • sz: フォントサイズをポイント単位の100倍で指定します。例えば、10.5ポイントにしたい場合は1050と指定します。
  • typeface: フォント名を指定します。PCにインストールされているフォントを指定してください。
  • color: ColorChoiceオブジェクトで色を指定します。prstClr"red""blue"のような定義済みの色名を使うのが簡単です。

レシピ2:軸ラベルを太字・イタリック体にする

フォントの太字・イタリック設定は、fontオブジェクトのbプロパティとiプロパティで簡単に設定できます。

レシピ1のコードを少し変更するだけで実現できます。

# --- (必要なクラスをインポートし、chart.x_axis を取得した後) ---

# 太字(b=True)で、イタリック(i=True)のフォントオブジェクトを作成
custom_font = Font(typeface='メイリオ', sz=1050, b=True, i=True)

# 軸のフォントに適用
chart.x_axis.font = custom_font

レシピ3:長い軸ラベルの向き(角度)を調整して重なりを防ぐ

軸ラベルの回転は、axis.txPr(Text Properties)オブジェクトのrotプロパティで設定します。

カテゴリ名が長い場合、ラベルが重なって非常に見づらくなります。そんなときは、ラベルを斜めに傾けることで見やすさを改善できます。

# --- 必要なクラスのインポート ---
from openpyxl.drawing.text import CharacterProperties

# --- (chart.x_axis を取得した後) ---

# テキストプロパティオブジェクトを作成
# rot には角度を 60000倍した値を設定(-90度から90度の範囲)
# 例: -45度を指定する場合
angle = -45
rotation = int(angle * 60000)

# テキストプロパティを作成して軸に適用
chart.x_axis.txPr = CharacterProperties(rot=rotation, spcFirstLastPara=True)

rotプロパティに設定する値は、設定したい角度(度数)に60,000を掛けた整数値です。少し直感的ではありませんが、このように覚えておきましょう。マイナスの値を指定すると、左下から右上に向かって傾きます。

レシピ4:軸線自体の色や太さを変更する

軸線自体のスタイルは、axis.spPr(Shape Properties)オブジェクトで設定します。

ラベルだけでなく、軸線そのものの色や太さを変えたい場合に使います。

# --- 必要なクラスのインポート ---
from openpyxl.drawing.line import LineProperties
from openpyxl.drawing.colors import ColorChoice

# --- (chart.x_axis を取得した後) ---

# 線のプロパティオブジェクトを作成
# w で線の太さを指定 (ポイント * 12700)
line_width = 1.5
line_props = LineProperties(solidFill=ColorChoice(prstClr="darkblue"), w=int(line_width * 12700))

# 軸の図形プロパティに適用
chart.x_axis.spPr = line_props

線の太さを表すwプロパティの値は、ポイント単位に12,700を掛けた整数値を指定します。

総合サンプルコード:これまでのカスタマイズを全て適用したグラフを作成

最後に、これまで紹介した全てのカスタマイズを適用した最終的なコードを示します。 このコードを実行すると、report_with_chart.xlsxというファイルが生成され、見やすくカスタマイズされたグラフが作成されているはずです。

from openpyxl import Workbook
from openpyxl.chart import BarChart, Reference
from openpyxl.drawing.text import Font, CharacterProperties
from openpyxl.drawing.colors import ColorChoice
from openpyxl.drawing.line import LineProperties

# --- ワークブックとデータの準備 ---
wb = Workbook()
ws = wb.active
ws.title = "月次売上レポート"

rows = [
    ["商品カテゴリ", "売上"],
    ["家庭用電化製品", 15000],
    ["スマートフォン・アクセサリ", 22000],
    ["PC・周辺機器", 18000],
    ["オーディオ・ビジュアル機器", 12000],
    ["キッチン用品", 9000],
]

for row in rows:
    ws.append(row)

# --- グラフの作成 ---
chart = BarChart()
chart.title = "月次売上レポート"
chart.style = 2

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

# --- ここからがTextAxisのカスタマイズ ---

# === X軸 (TextAxis) の設定 ===
x_axis = chart.x_axis

# レシピ1 & 2: フォントの色、サイズ、太字を設定
font_color = ColorChoice(prstClr="darkred")
custom_font = Font(typeface='游ゴシック', sz=950, b=True)
custom_font.color = font_color
x_axis.font = custom_font

# レシピ3: ラベルの向きを-30度傾ける
angle = -30
rotation = int(angle * 60000)
x_axis.txPr = CharacterProperties(rot=rotation, spcFirstLastPara=True)

# レシピ4: 軸線の色と太さを設定
line_color = ColorChoice(prstClr="gray")
line_props = LineProperties(solidFill=line_color, w=int(1.0 * 12700))
x_axis.spPr = line_props

# Y軸のラベルも少しだけカスタマイズ
y_axis = chart.y_axis
y_axis.title = "売上金額(円)"
y_axis.majorGridlines = None # 主目盛線を非表示に

# --- グラフをシートに追加して保存 ---
ws.add_chart(chart, "D2")
wb.save("report_with_chart.xlsx")

print("カスタマイズされたグラフを含むExcelファイルを作成しました。")

このコードによって生成されたExcelを開くと、X軸のラベルが赤色の太字になり、斜めに傾いて表示され、軸線自体も灰色になっていることが確認できます。

まとめ:TextAxisを制して、伝わるグラフを作ろう

今回は、openpyxlを使ってグラフの軸ラベルをカスタマイズする方法、特にTextAxisの基本的な使い方について解説しました。

本記事の重要なポイントを振り返ります。

  • TextAxisは、グラフのカテゴリ軸(文字列ラベルの軸)を操作するためのクラスです。
  • グラフオブジェクトの.x_axis.y_axis属性から軸オブジェクトを取得します。
  • フォントの変更は axis.font オブジェクトで行います。
  • ラベルの回転(向き)は axis.txPr (Text Properties) で設定します。
  • 軸線自体のスタイルは axis.spPr (Shape Properties) で設定します。

これらのテクニックを使えば、データの内容がより直感的に伝わる、高品質なグラフをPythonコードだけで自動生成できます。レポート作成の自動化など、日々の業務でぜひ活用してみてください。

コメント

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