はじめに:openpyxlで「なんかダサい」グラフから卒業しよう
Pythonライブラリのopenpyxlは、Excelファイルを自動操作する上で非常に強力なツールです。特に、データからグラフを自動生成する機能は、レポート作成の自動化などで重宝します。
しかし、デフォルト設定でグラフを作成すると、「軸の文字が小さくて読みづらい」「ラベル名が長すぎて重なってしまう」といった、見た目の問題に直面することがよくあります。
この記事を読めば、openpyxlのTextAxisクラスを使いこなし、グラフの軸ラベル(カテゴリ名など)の見た目を自由自在にカスタマイズできるようになります。
具体的には、以下のようなカスタマイズ方法を、初心者の方にも分かりやすくサンプルコード付きで解説します。
- 軸ラベルのフォントサイズや色の変更
- 軸ラベルの太字・イタリック設定
- 軸ラベルの向き(角度)の調整
手作業での「見た目調整」から卒業し、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(orCategoryAxis): カテゴリ軸。今回の例では「家庭用電化製品」などの商品名が並ぶ軸です。NumericAxis(orValueAxis): 数値軸。売上金額など、数値の大小を表す軸です。DateAxis: 日付軸。時系列データを扱う際に使われます。
これらのクラスを適切に使い分けることで、グラフの各要素を詳細に設定できます。今回は、商品カテゴリ名が表示されるX軸(横軸)を対象に、TextAxisの使い方をマスターしていきましょう。
TextAxisの基本:軸オブジェクトを取得してプロパティを設定する流れ
TextAxisの各設定を変更するには、まず目的の軸オブジェクトにアクセスする必要があります。
chart.x_axisやchart.y_axisといった属性から、目的の軸オブジェクトにアクセスするのが基本です。
グラフを作成した後、以下のようにして軸オブジェクトにアクセスし、そのプロパティを変更していきます。
# (グラフオブジェクト chart を作成した後...)
# X軸(今回はTextAxis)を取得
x_axis = chart.x_axis
# Y軸(今回はNumericAxis)を取得
y_axis = chart.y_axis
# これ以降、x_axisのプロパティを様々に設定していく
# 例: x_axis.プロパティ名 = 設定値今回の棒グラフでは、X軸がカテゴリ(商品名)なのでchart.x_axisがTextAxisオブジェクトに対応します。この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_fontsz: フォントサイズをポイント単位の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コードだけで自動生成できます。レポート作成の自動化など、日々の業務でぜひ活用してみてください。


コメント