openpyxl.chart.label.DataLabelを徹底解説!グラフの表現力を上げるテクニック

openpyxl

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

Pythonのopenpyxlライブラリを使い、Excelのグラフ作成を自動化している皆さん、こんにちは!

「グラフに数値を表示させたいけど、どうすれば?」「数値だけでなく、項目名やパーセントも表示したい」「ラベルの位置や色を細かく調整したい…」といったお悩みはありませんか?

この記事は、まさにそんなあなたのためのガイドです。最後まで読めば、openpyxl.chart.label.DataLabelクラスを自由自在に操り、手作業では時間のかかるグラフのカスタマイズをスマートに自動化できるようになります。見栄えの良い、”伝わる”グラフ作成のテクニックを身につけていきましょう。


DataLabelとは?openpyxlにおけるグラフの基本構造

まず結論として、**DataLabel(データラベル)**とは、グラフ上の各データ要素(棒グラフの「棒」や円グラフの「扇形」など)に付与されるテキスト情報のことです。これがあるだけで、グラフの数値が一目でわかるようになり、格段に情報が伝わりやすくなります。

openpyxlでグラフを操作する際は、WorkbookWorksheetChartSeries(データ系列)という階層構造を理解することが重要です。そして、データラベルはChartオブジェクトのプロパティとして設定します。

このDataLabelを理解し、設定方法をマスターすることが、見やすいグラフを自動作成するための鍵となります。


【基本】グラフにデータラベルを追加する方法

まずは、最も基本となる「数値のデータラベル」をグラフに追加する方法から見ていきましょう。やり方は非常にシンプルで、グラフオブジェクトのdLblsプロパティにDataLabelオブジェクトを設定するだけです。

DataLabelをインスタンス化する際にshowVal=Trueと指定することで、「値を表示する」という設定が有効になります。

サンプルコード:棒グラフに数値のデータラベルを追加する

以下は、簡単な棒グラフを作成し、それぞれの棒の上に数値のデータラベルを表示する基本的なコードです。このコードは、openpyxlのバージョン3.0.0以降で動作確認しています。

import openpyxl
from openpyxl.chart import BarChart, Reference
from openpyxl.chart.label import DataLabel

# 1. ワークブックとワークシートを準備
wb = openpyxl.Workbook()
ws = wb.active
ws.title = "DataLabel_Basic"

# 2. グラフの元となるデータを作成
rows = [
    ("商品", "売上"),
    ("A", 450),
    ("B", 320),
    ("C", 280),
]
for row in rows:
    ws.append(row)

# 3. グラフオブジェクトを作成
chart = BarChart()
chart.title = "商品別売上"
chart.x_axis.title = "商品"
chart.y_axis.title = "売上"

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

# 5. ★データラベルを設定★
# DataLabelオブジェクトを作成し、値の表示(showVal)をTrueにする
chart.dLbls = DataLabel(showVal=True)

# 6. ワークシートにグラフを追加して保存
ws.add_chart(chart, "E2")
wb.save("DataLabel_Basic_Example.xlsx")

print("グラフが作成されました。")

このコードを実行すると、各棒の上に売上数が表示されたExcelファイルが生成されます。たった一行chart.dLbls = DataLabel(showVal=True)を追加するだけで実現できるのがポイントです。


【応用】DataLabelを徹底カスタマイズするテクニック

基本が分かったところで、次はいよいよ応用編です。DataLabelオブジェクトが持つ様々なプロパティを使いこなし、データラベルの見た目を自由自在にカスタマイズしていきましょう。

表示する内容をコントロールする

DataLabelには、数値以外にも様々な情報を表示させるための真偽値(True/False)プロパティが用意されています。これらを組み合わせることで、より情報量の多いラベルを作成できます。

  • showVal: 数値の表示/非表示
  • showCatName: カテゴリ名(項目名)の表示/非表示
  • showSerName: 系列名の表示/非表示
  • showPercent: パーセンテージの表示/非表示(主に円グラフで有効)
  • showLeaderLines: 引き出し線の表示/非表示

サンプルコード:円グラフに「項目名」と「パーセンテージ」を表示

from openpyxl.chart import PieChart
# ... (ワークブック、ワークシート、データ準備は上記と同様)

# 円グラフを作成
pie_chart = PieChart()

# データラベルで「カテゴリ名」と「パーセンテージ」を表示するように設定
# separatorで区切り文字も指定可能
pie_chart.dLbls = DataLabel(
    showCatName=True,
    showPercent=True,
    separator=': ' # カテゴリ名とパーセントの間にコロンとスペースを入れる
)

# ... (データを追加し、シートに配置して保存)
# pie_chart.add_data(data, titles_from_data=True)
# pie_chart.set_categories(cats)
# ws.add_chart(pie_chart, "E18")
# wb.save("DataLabel_Customize_Example.xlsx")

この設定により、「A: 45%」のように、どの項目がどのくらいの割合を占めているのかが一目でわかるようになります。

データラベルの位置を調整する (dLblPos)

データラベルの表示位置はdLblPosプロパティで指定できます。グラフの種類によって見やすい位置は異なるため、適切に設定することが重要です。

  • 'ctr': 中央
  • 'inBase': 内側軸寄り(棒グラフの根元など)
  • 'inEnd': 内側上/右(棒グラフの先端の内側など)
  • 'outEnd': 外側上/右(棒グラフの先端の外側など)
  • 'bestFit': 自動調整

サンプルコード:棒グラフのデータラベルを「内側の先端」に表示

# ... (棒グラフ作成のコード)

# データラベルの位置を内側の先端('inEnd')に設定
chart.dLbls = DataLabel(showVal=True, dLblPos='inEnd')

# ... (シートに配置して保存)

数値の書式(Number Format)を設定する

numFmtプロパティを使えば、データラベルの数値をExcelの表示形式コードで自由にフォーマットできます。これにより、桁区切りカンマや通貨記号、パーセンテージの小数点以下の桁数などを細かく制御できます。

  • '#,##0': 3桁区切りカンマ
  • '¥#,##0': 3桁区切りカンマと円マーク
  • '0.0%': 小数点第一位までのパーセント表示

サンプルコード:数値に3桁区切りカンマを設定

# ... (棒グラフ作成のコード)

# 数値のフォーマットを3桁区切りに設定
chart.dLbls = DataLabel(showVal=True, numFmt='#,##0')

# ... (シートに配置して保存)

フォントや塗りつぶしなどの書式を設定する (Text Properties)

DataLabelオブジェクトは、テキスト自体の書式(フォント、色など)や、ラベルの背景色なども設定可能です。これにはtxPr(Text Properties)やspPr(Shape Properties)といった、より詳細なオブジェクトを利用します。少し複雑になりますが、表現の幅が大きく広がります。

サンプルコード:データラベルの文字を太字にし、背景を黄色にする

from openpyxl.drawing.text import RichText, Paragraph, ParagraphProperties, CharacterProperties
from openpyxl.drawing.fill import SolidColorFillProperties

# ... (棒グラフ作成のコード)

# テキストの書式設定(太字)
char_props = CharacterProperties(b=True) # b=Trueで太字
# 図形の書式設定(背景を黄色で塗りつぶし)
shape_props = SolidColorFillProperties(prstClr="yellow")

chart.dLbls = DataLabel(
    showVal=True,
    txPr=RichText(p=[Paragraph(pPr=ParagraphProperties(defRPr=char_props), endParaRPr=char_props)]),
    spPr=shape_props
)

# ... (シートに配置して保存)

よくある質問・エラーと対処法

Q1. データラベルが全く表示されない

A. DataLabel()を作成する際に、showVal=TrueshowCatName=Trueのように、何か一つ以上を表示する設定がTrueになっているか確認してください。また、作成したDataLabelオブジェクトを、chart.dLblsに正しく代入できているかも見直しましょう。

Q2. 特定のデータポイントだけラベルを操作したい

A. グラフ全体のラベルではなく、特定のデータ点(例:一番高い棒だけ)のラベルを個別に設定することも可能です。そのためには、chart.seriesオブジェクトをループ処理し、個別のDataPointオブジェクトのdLblプロパティを設定します。これはより高度なテクニックですが、特定の値を強調したい場合に有効です。


まとめ:DataLabelを使いこなして表現力豊かなグラフを作成しよう

今回は、openpyxlを使ってExcelグラフのデータラベルをカスタマイズする方法を、基本から応用まで解説しました。

  • グラフへのデータラベル追加は chart.dLbls = DataLabel(...) が基本
  • showValshowPercentなどのプロパティで表示内容を自由に制御できる
  • dLblPosで表示位置、numFmtで数値書式を細かく調整可能
  • txPrspPrを使えば、フォントや背景色などの詳細な書式設定もできる

DataLabelを使いこなすことで、PythonによるExcel帳票作成の自動化レベルは格段に向上します。今回紹介したテクニックを元に、ぜひあなたの業務や分析で、より伝わりやすく、表現力豊かなグラフを作成してみてください。

コメント

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