Pythonのopenpyxlライブラリを使ってExcel業務を自動化していると、グラフ作成機能の便利さに気づきます。しかし、ただグラフを作成しただけでは、「どうも見た目がデフォルトのままで物足りない…」と感じることはありませんか?レポートや資料に使うグラフなら、もっと見栄えを良くして、情報を効果的に伝えたいですよね。
この記事では、そんな悩みを解決するために、グラフのデータが描画される核心部分である**「PlotArea(プロットエリア)」の書式をPythonで自由にカスタマイズする方法**を、具体的なコードを交えながら基礎から徹底的に解説します。
この記事を最後まで読めば、openpyxlで作成したグラフの背景色や枠線のスタイルを自在に操れるようになり、あなたのExcelグラフの表現力が格段にアップします。
そもそもopenpyxl.chart.plotareaとは?
まず結論から。PlotAreaとは、**Excelグラフ内で軸に囲まれた、実際にデータが描画される領域(背景部分)**のことです。棒グラフなら棒が、折れ線グラフなら線が表示される、まさにグラフの「キャンバス」とも言える部分を指します。
このPlotAreaの背景色を変えたり、枠線のスタイルを調整したりするだけで、グラフ全体の印象は大きく変わります。例えば、特定のデータを強調するために背景を薄い色で塗りつぶしたり、デザインの統一感を出すために枠線を消したりと、視覚的な効果は絶大です。
openpyxlでは、このPlotAreaをオブジェクトとして取得し、そのプロパティを変更することで、Excel上での手作業と同じように書式設定を自動化できるのです。
カスタマイズの準備:グラフとPlotAreaオブジェクトの取得
PlotAreaを操作するには、まずグラフオブジェクトを作成し、その.plot_area属性にアクセスします。 ここでは、カスタマイズの土台となるグラフを準備する手順を見ていきましょう。
必要なライブラリのインポートとサンプルデータ準備
まずは、openpyxlと、グラフ作成に必要なクラスをインポートします。そして、簡単なサンプルデータを持つExcelファイルと棒グラフをコードで作成します。
以下のコードは、この後のカスタマイズで共通して使用する基本のコードです。コピーしてcustomize_chart.pyのような名前で保存しておくと便利です。
import openpyxl
from openpyxl.chart import BarChart, Reference
# 1. 新しいワークブックとシートを作成
wb = openpyxl.Workbook()
ws = wb.active
ws.title = "SalesData"
# 2. サンプルデータをシートに追加
rows = [
("Month", "Sales"),
("Jan", 150),
("Feb", 230),
("Mar", 180),
("Apr", 310),
("May", 260),
]
for row in rows:
ws.append(row)
# 3. グラフオブジェクトを作成 (今回は棒グラフ)
chart = BarChart()
chart.title = "Monthly Sales"
chart.x_axis.title = "Month"
chart.y_axis.title = "Sales (USD)"
# 4. グラフのデータ範囲とカテゴリを指定
# データはB1からB6まで (B1はヘッダー)
data = Reference(ws, min_col=2, min_row=1, max_row=6)
# カテゴリ(X軸ラベル)はA2からA6まで
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")
# --- ここまでは準備 ---
# 6. ファイルを保存
wb.save("sales_chart_base.xlsx")このコードを実行すると、月別の売上データと、それに基づいた基本的な棒グラフが描画されたsales_chart_base.xlsxというファイルが生成されます。
chart.plot_areaでPlotAreaオブジェクトにアクセスする方法
カスタマイズの第一歩は、先ほど作成したchartオブジェクトからPlotAreaオブジェクトを取得することです。これは非常に簡単で、.plot_area属性を参照するだけです。
# chartオブジェクトからPlotAreaオブジェクトを取得
plot_area = chart.plot_areaこれ以降のカスタマイズは、すべてこのplot_areaオブジェクトに対して行っていきます。
【実践】PlotAreaの書式をカスタマイズする基本コード
PlotAreaの書式設定は、主にspPr(GraphicalProperties)というプロパティを通じて行います。 このspPrプロパティの中に、背景の塗りつぶし(solidFillやnoFill)や枠線(ln)といった、さらに詳細な設定項目が含まれています。
それでは、具体的なカスタマイズ例を見ていきましょう。
プロットエリアの背景を「塗りつぶしなし(透明)」にする
まずは最もシンプルな例として、PlotAreaの背景色をなくし、透明にする方法です。
結論として、plot_area.spPr.noFill = Trueと設定します。
import openpyxl
from openpyxl.chart import BarChart, Reference
# (中略) ... 上記の準備コードの1〜5までをここに記述 ...
# --- ここからカスタマイズ ---
# PlotAreaオブジェクトを取得
plot_area = chart.plot_area
# 背景を塗りつぶしなしに設定
plot_area.spPr.noFill = True
# --- カスタマイズここまで ---
# 5. グラフをシートに追加
ws.add_chart(chart, "E2")
# 6. ファイルを保存
wb.save("chart_no_fill.xlsx")
print("背景が透明なグラフを含むExcelファイルを生成しました。")このコードを実行すると、プロットエリアの背景の灰色がなくなり、セルのグリッド線が透けて見えるグラフが作成されます。
プロットエリアの背景を「単色で塗りつぶす」
次に、PlotAreaを好きな色で塗りつぶしてみましょう。
結論として、SolidColorFillPropertiesを使って色を指定し、plot_area.spPr.solidFillに設定します。
色の指定には、16進数のRGBカラーコードが便利です。openpyxlで扱うためには、いくつかのクラスを新たに追加でインポートする必要があります。
import openpyxl
from openpyxl.chart import BarChart, Reference
# 色設定のために追加でインポート
from openpyxl.drawing.fill import SolidColorFillProperties
from openpyxl.drawing.colors import RGB_HEX
# (中略) ... 上記の準備コードの1〜5までをここに記述 ...
# --- ここからカスタマイズ ---
# PlotAreaオブジェクトを取得
plot_area = chart.plot_area
# 背景を単色(薄いピンク)で塗りつぶす
# SolidColorFillPropertiesオブジェクトを作成し、srgbClrに16進数カラーコードを指定
fill_props = SolidColorFillProperties(srgbClr="FFECF5")
plot_area.spPr.solidFill = fill_props
# --- カスタマイズここまで ---
# 5. グラフをシートに追加
ws.add_chart(chart, "E2")
# 6. ファイルを保存
wb.save("chart_solid_fill.xlsx")
print("背景が単色で塗りつぶされたグラフを含むExcelファイルを生成しました。")このコードでは、PlotAreaの背景が綺麗な薄いピンク色になります。srgbClrに指定するカラーコードを変えれば、どんな色にも変更可能です。
プロットエリアの「枠線を消す」
グラフによっては、PlotAreaを囲む枠線が不要な場合もあります。
結論として、枠線を消すにはplot_area.spPr.ln.noFill = Trueと設定します。 ここでlnはLineProperties(線のプロパティ)を指します。
import openpyxl
from openpyxl.chart import BarChart, Reference
# (中略) ... 上記の準備コードの1〜5までをここに記述 ...
# --- ここからカスタマイズ ---
# PlotAreaオブジェクトを取得
plot_area = chart.plot_area
# 枠線を消す
# LinePropertiesの塗りつぶしをなしに設定
if plot_area.spPr.ln:
plot_area.spPr.ln.noFill = True
# --- カスタマイズここまで ---
# 5. グラフをシートに追加
ws.add_chart(chart, "E2")
# 6. ファイルを保存
wb.save("chart_no_line.xlsx")
print("枠線が消されたグラフを含むExcelファイルを生成しました。")spPr.lnは存在しない場合もあるため、if文で存在確認をしてから設定すると、より安全なコードになります。
プロットエリアの「枠線を設定する」(色・太さ・種類)
逆に、枠線を強調したり、デザインを変更したりすることも可能です。
結論として、枠線の設定はplot_area.spPr.lnプロパティのsolidFill(色)、width(太さ)、prstDash(種類)などで行います。
import openpyxl
from openpyxl.chart import BarChart, Reference
from openpyxl.drawing.line import LineProperties
from openpyxl.drawing.fill import SolidColorFillProperties
from openpyxl.utils.units import points_to_EMU
# (中略) ... 上記の準備コードの1〜5までをここに記述 ...
# --- ここからカスタマイz ---
# PlotAreaオブジェクトを取得
plot_area = chart.plot_area
# 線の色を定義(濃い青)
line_color = SolidColorFillProperties(srgbClr="003366")
# 線のプロパティをまとめるLinePropertiesオブジェクトを作成
line_props = LineProperties(solidFill=line_color)
# 線の太さを設定 (2ポイントをEMU単位に変換)
line_props.width = points_to_EMU(2)
# 線の種類を破線に設定
line_props.prstDash = "dash"
# PlotAreaの枠線プロパティに設定
plot_area.spPr.ln = line_props
# --- カスタマイズここまで ---
# 5. グラフをシートに追加
ws.add_chart(chart, "E2")
# 6. ファイルを保存
wb.save("chart_custom_line.xlsx")
print("枠線がカスタマイズされたグラフを含むExcelファイルを生成しました。")この例では、LinePropertiesを使って、濃い青色の太い破線を設定しています。線の太さはwidthプロパティで指定しますが、単位がEMU(English Metric Units)という特殊なものなので、points_to_EMUユーティリティ関数を使ってポイント単位から変換するのが直感的でオススメです。
少し応用:GraphicalPropertiesで設定をまとめる
ここまでの例では、plot_area.spPrの各プロパティに直接設定を行いました。しかし、背景と枠線の設定を両方行う場合など、複数の設定を一度に行いたい場合もあります。
結論として、GraphicalPropertiesオブジェクトを事前に作成し、そこに塗りつぶしや線の設定をまとめてからPlotAreaに適用することで、コードが整理され、再利用しやすくなります。
import openpyxl
from openpyxl.chart import BarChart, Reference
from openpyxl.drawing.properties import GraphicalProperties # これをインポート
from openpyxl.drawing.line import LineProperties
from openpyxl.drawing.fill import SolidColorFillProperties
from openpyxl.utils.units import points_to_EMU
# (中略) ... 上記の準備コードの1〜5までをここに記述 ...
# --- ここからカスタマイズ ---
# 1. 線の設定を作成
line_color = SolidColorFillProperties(srgbClr="4F4F4F") # ダークグレー
line_props = LineProperties(solidFill=line_color)
line_props.width = points_to_EMU(0.75)
# 2. 塗りつぶしの設定を作成
fill_color = SolidColorFillProperties(srgbClr="F5F5F5") # 薄いグレー
# 3. GraphicalPropertiesオブジェクトに設定をまとめる
sp = GraphicalProperties(solidFill=fill_color, ln=line_props)
# 4. PlotAreaにまとめて適用
chart.plot_area.spPr = sp
# --- カスタマイズここまで ---
# 5. グラフをシートに追加
ws.add_chart(chart, "E2")
# 6. ファイルを保存
wb.save("chart_all_in_one.xlsx")
print("背景と枠線をまとめて設定したグラフを含むExcelファイルを生成しました。")このように、設定内容をGraphicalPropertiesオブジェクトとして変数spにまとめてから代入することで、何を設定しているのかが明確になり、コードの可読性が向上します。
まとめ
今回は、openpyxlを使ってExcelグラフのPlotAreaをカスタマイズする基本的な方法について解説しました。最後に、重要なポイントを振り返りましょう。
PlotAreaはグラフのデータ描画領域のことで、chart.plot_area属性でアクセスできる。- 書式設定の中心は
spPr(GraphicalProperties) プロパティ。 - 背景の塗りつぶしは
spPr.solidFillやspPr.noFill = Trueを使う。 - 枠線の設定は
spPr.ln(LineProperties) で行い、色・太さ・種類などを変更できる。 GraphicalPropertiesオブジェクトを使うと、複数の設定をまとめて適用でき、コードが綺麗になる。
PlotAreaのカスタマイズをマスターするだけで、openpyxlで作成するグラフのクオリティは格段に向上します。ぜひ、今回紹介したコードを参考に、あなたのExcel自動化処理に彩りを加えてみてください。
次のステップとして、凡例(chart.legend)や軸(chart.x_axis, chart.y_axis)のフォントや書式設定にも挑戦してみることをお勧めします。


コメント