openpyxl.chart.MajorGridlinesを徹底解説!PythonでExcelグラフの主目盛線をマスター

openpyxl

はじめに:この記事で解決できること

Pythonのopenpyxlライブラリは、Excelファイルを自動で操作できる非常に便利なツールです。特に、データからグラフを自動生成する機能は、レポート作成業務などを大幅に効率化してくれます。

しかし、デフォルトで作成されるグラフには「目盛線」が表示されており、「この線を消してグラフをスッキリさせたい」「目盛線の色やスタイルを変えて、もっと見やすいグラフにしたい」と感じたことはないでしょうか?

この記事では、そんな悩みを解決するために、openpyxlでグラフの主目盛線(MajorGridlines)を自由自在に操る方法を徹底的に解説します。

この記事を読み終える頃には、あなたは以下のスキルを身につけているはずです。

  • Pythonのopenpyxlで作成したExcelグラフの「主目盛線」が何かがわかる
  • グラフの主目盛線を非表示にして、見た目をスッキリさせる方法がわかる
  • 主目盛線の色、太さ、線の種類(破線など)を自由自在にカスタマイズする方法がわかる
  • コードを実行したときに起こりがちなエラーとその対処法がわかる

初心者の方でもコピペで試せるコードを多数用意しましたので、ぜひ最後までご覧ください。

前提:openpyxlで基本的なグラフを作成する準備

まずは、この記事で解説を進めるための土台となる、基本的な棒グラフを作成するPythonコードを見ていきましょう。 以下のコードは、サンプルデータを使ってExcelファイルに簡単な棒グラフを描画するものです。openpyxlが未インストールの方は、ターミナルやコマンドプロンプトでpip install openpyxlを実行してください。

import openpyxl
from openpyxl.chart import BarChart, Reference

# 1. Excelワークブックを新規作成
wb = openpyxl.Workbook()
ws = wb.active
ws.title = "GraphSample"

# 2. グラフの元となるサンプルデータを書き込む
rows = [
    ("商品", "2024年売上"),
    ("A", 450),
    ("B", 320),
    ("C", 280),
    ("D", 510),
    ("E", 380),
]

for row in rows:
    ws.append(row)

# 3. グラフオブジェクトを作成 (棒グラフ)
chart = BarChart()
chart.type = "col"
chart.style = 10
chart.title = "商品別売上"
chart.y_axis.title = "売上(万円)"
chart.x_axis.title = "商品名"

# 4. データをグラフに設定
data = Reference(ws, min_col=2, min_row=1, max_row=6, max_col=2)
cats = Reference(ws, min_col=1, min_row=2, max_row=6)
chart.add_data(data, titles_from_data=True)
chart.set_categories(cats)

# 5. グラフをシートに追加
ws.add_chart(chart, "E2")

# --- ここからMajorGridlinesの操作を追加していく ---


# --- 操作後のExcelファイルを保存 ---
wb.save("MajorGridlines_Sample.xlsx")

この時点では、Y軸(縦軸)に水平な目盛線が入った、ごく標準的なグラフが生成されます。ここから、この目盛線を操作していきます。

MajorGridlinesとは?Excelグラフの「主目盛線」を理解しよう

まず結論から。MajorGridlinesとは、グラフの軸の目盛りに対応して引かれる主要な線のことです。一般的には「目盛線」や「グリッド線」と呼ばれます。

openpyxlでは、グラフオブジェクト(chart)の各軸(x_axisy_axis)が、このmajorGridlinesというプロパティを持っています。

  • chart.y_axis.majorGridlines
    • Y軸(縦軸)の目盛りに対応する水平な線を制御します。
  • chart.x_axis.majorGridlines
    • X軸(横軸)の目盛りに対応する垂直な線を制御します。

デフォルトの棒グラフでは、Y軸の主目盛線のみが表示されていることが多いです。このmajorGridlinesプロパティを操作することで、線の表示・非表示や見た目を変更できるのです。

【基本】主目盛線を非表示にする最も簡単な方法

これが最も知りたかったことかもしれません。主目盛線を非表示にするのは非常に簡単です。

結論は、対象の軸のmajorGridlinesプロパティにNoneを設定するだけです。

Y軸の主目盛線(水平線)を非表示にするコード例

グラフの水平線を消したい場合は、Y軸のmajorGridlinesNoneにします。

# Y軸の主目盛線(水平線)を非表示にする
chart.y_axis.majorGridlines = None

先ほどの基本コードの「--- ここからMajorGridlinesの操作を追加していく ---」の箇所にこの1行を追加して実行すると、グラフから水平の目盛線が消え、スッキリとした見た目になります。

X軸の主目盛線(垂直線)を非表示にするコード例

もしX軸に垂直な目盛線が表示されているグラフ(散布図など)で、それを消したい場合も同様です。

# X軸の主目盛線(垂直線)を非表示にする
chart.x_axis.majorGridlines = None

Noneを代入する、というシンプルな操作で表示・非表示を切り替えられるので、ぜひ覚えておきましょう。

【応用】MajorGridlinesの書式をspPrでカスタマイズする

線を消すだけでなく、色や太さ、種類を自由に変えたい場合もあるでしょう。

結論として、そのような詳細な書式設定は、majorGridlinesが持つspPr(Shape Propertiesの略)というプロパティで行います。具体的には、openpyxl.drawing.line.LinePropertiesクラスを使って線の見た目を定義し、それをspPrに設定します。

まずは、LinePropertiesをインポートしておきましょう。

from openpyxl.drawing.line import LineProperties

主目盛線の色を変更する

目盛線の色を変えるには、LinePropertiessolidFillを使って色を指定します。色はRRGGBB形式の6桁の16進数文字列で指定します。

例えば、目盛線を赤色 (FF0000) にしてみましょう。

from openpyxl.drawing.line import LineProperties

# 赤色の線のプロパティを定義
red_line = LineProperties(solidFill="FF0000")

# Y軸の主目盛線の書式に設定
chart.y_axis.majorGridlines.spPr = red_line

主目盛線の太さを変更する

線の太さはw (width) プロパティで指定します。単位はEMU (English Metric Unit) ですが、直感的にポイント数のような感覚で数値を指定すればOKです。数値が大きいほど太くなります。

例えば、線の太さを1.5pt相当(15000 EMU)にしてみましょう。

from openpyxl.drawing.line import LineProperties

# 太い線のプロパティを定義
thick_line = LineProperties(w=15000) # 1.5pt相当

# Y軸の主目盛線の書式に設定
chart.y_axis.majorGridlines.spPr = thick_line

主目盛線のスタイルを破線や点線に変更する

線のスタイルはprstDash (preset dash) プロパティで変更できます。'dash'(破線)や'dot'(点線)、'lgDash'(長い破線)などを文字列で指定します。

ここでは、Y軸の目盛線をグレーの破線にしてみましょう。色、太さ、スタイルを同時に設定することも可能です。

from openpyxl.drawing.line import LineProperties

# グレーの破線のプロパティを定義
gray_dashed_line = LineProperties(
    solidFill="808080", # グレー
    w=10000,           # 1.0pt相当
    prstDash="dash"      # 破線
)

# Y軸の主目盛線の書式に設定
chart.y_axis.majorGridlines.spPr = gray_dashed_line

このようにLinePropertiesを使いこなせば、デザイン性の高いグラフをPythonだけで作成できます。

よくあるエラー:AttributeErrorの原因と対処法

majorGridlinesの書式設定を試みたときに、以下のようなエラーに遭遇することがあります。

AttributeError: 'NoneType' object has no attribute 'spPr'
Code language: JavaScript (javascript)

これは非常によくあるつまずきポイントなので、原因と対処法をしっかり理解しておきましょう。

エラーが発生する原因

このエラーメッセージは、「None(何もない)オブジェクトに対してspPrという属性を呼び出そうとしました」という意味です。

なぜNoneなのか?それは、操作しようとした軸のmajorGridlinesプロパティが、デフォルトでNone(非表示状態)になっているためです。

例えば、デフォルトで垂直線が表示されていない棒グラフに対して、いきなりX軸の目盛線の色を変えようとするとこのエラーが発生します。

# これはエラーになる可能性がある
# chart.x_axis.majorGridlines が None の場合があるため
chart.x_axis.majorGridlines.spPr = LineProperties(solidFill="FF0000")

エラーの解決策

解決策はシンプルです。書式設定を行う前に、MajorGridlinesオブジェクトのインスタンスを生成して、軸のプロパティに設定してあげるのです。

グラフオブジェクト(chart)自身が、コンストラクタとしてMajorGridlinesを持っています。

# 1. MajorGridlinesのインスタンスを生成
chart.y_axis.majorGridlines = openpyxl.chart.gridline.MajorGridlines()

# 2. これで spPr に安全にアクセスできる
line_props = LineProperties(solidFill="0000FF") # 青線
chart.y_axis.majorGridlines.spPr = line_props

openpyxlのバージョンやグラフの種類によっては、chart.MajorGridlines()ではなくopenpyxl.chart.gridline.MajorGridlines()のようにフルパスで指定する必要がある場合があります。

書式設定でAttributeErrorが出たら、「ああ、インスタンスがNoneなんだな。先にオブジェクトを生成してあげよう」と思い出してください。

まとめ

今回は、Pythonのopenpyxlライブラリを使って、Excelグラフの主目盛線(MajorGridlines)を非表示にしたり、見た目をカスタマイズしたりする方法を解説しました。

最後に、重要なポイントを振り返りましょう。

  • 主目盛線とは: chart.x_axis.majorGridlineschart.y_axis.majorGridlines でアクセスできるグラフの主要な目盛りの線。
  • 非表示にする方法: 最も簡単な方法は、majorGridlinesプロパティに None を代入すること。
    • chart.y_axis.majorGridlines = None
  • カスタマイズする方法: majorGridlines.spPr プロパティに LineProperties オブジェクトを設定する。色(solidFill)、太さ(w)、線の種類(prstDash)などを指定できる。
  • AttributeError対策: 書式設定時にこのエラーが出たら、majorGridlinesNoneになっている証拠。先にMajorGridlinesのインスタンスを生成してから書式設定を行う。

MajorGridlinesを自在にコントロールできるようになれば、Pythonで自動生成するExcelグラフの品質が格段に向上します。ぜひ、あなたのレポート作成業務やデータ分析に役立ててください。

コメント

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