はじめに:この記事で解決できること
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_axisやy_axis)が、このmajorGridlinesというプロパティを持っています。
chart.y_axis.majorGridlines- Y軸(縦軸)の目盛りに対応する水平な線を制御します。
chart.x_axis.majorGridlines- X軸(横軸)の目盛りに対応する垂直な線を制御します。
デフォルトの棒グラフでは、Y軸の主目盛線のみが表示されていることが多いです。このmajorGridlinesプロパティを操作することで、線の表示・非表示や見た目を変更できるのです。
【基本】主目盛線を非表示にする最も簡単な方法
これが最も知りたかったことかもしれません。主目盛線を非表示にするのは非常に簡単です。
結論は、対象の軸のmajorGridlinesプロパティにNoneを設定するだけです。
Y軸の主目盛線(水平線)を非表示にするコード例
グラフの水平線を消したい場合は、Y軸のmajorGridlinesをNoneにします。
# Y軸の主目盛線(水平線)を非表示にする
chart.y_axis.majorGridlines = None先ほどの基本コードの「--- ここからMajorGridlinesの操作を追加していく ---」の箇所にこの1行を追加して実行すると、グラフから水平の目盛線が消え、スッキリとした見た目になります。
X軸の主目盛線(垂直線)を非表示にするコード例
もしX軸に垂直な目盛線が表示されているグラフ(散布図など)で、それを消したい場合も同様です。
# X軸の主目盛線(垂直線)を非表示にする
chart.x_axis.majorGridlines = NoneNoneを代入する、というシンプルな操作で表示・非表示を切り替えられるので、ぜひ覚えておきましょう。
【応用】MajorGridlinesの書式をspPrでカスタマイズする
線を消すだけでなく、色や太さ、種類を自由に変えたい場合もあるでしょう。
結論として、そのような詳細な書式設定は、majorGridlinesが持つspPr(Shape Propertiesの略)というプロパティで行います。具体的には、openpyxl.drawing.line.LinePropertiesクラスを使って線の見た目を定義し、それをspPrに設定します。
まずは、LinePropertiesをインポートしておきましょう。
from openpyxl.drawing.line import LineProperties主目盛線の色を変更する
目盛線の色を変えるには、LinePropertiesのsolidFillを使って色を指定します。色は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.majorGridlinesやchart.y_axis.majorGridlinesでアクセスできるグラフの主要な目盛りの線。 - 非表示にする方法: 最も簡単な方法は、
majorGridlinesプロパティにNoneを代入すること。chart.y_axis.majorGridlines = None
- カスタマイズする方法:
majorGridlines.spPrプロパティにLinePropertiesオブジェクトを設定する。色(solidFill)、太さ(w)、線の種類(prstDash)などを指定できる。 AttributeError対策: 書式設定時にこのエラーが出たら、majorGridlinesがNoneになっている証拠。先にMajorGridlinesのインスタンスを生成してから書式設定を行う。
MajorGridlinesを自在にコントロールできるようになれば、Pythonで自動生成するExcelグラフの品質が格段に向上します。ぜひ、あなたのレポート作成業務やデータ分析に役立ててください。


コメント