見やすいグラフは「データラベル」が鍵!PythonとopenpyxlのDataLabelListで差をつける

はじめに:そのグラフ、数値がなくて本当に伝わっていますか?

あなたがPythonで自動作成したそのExcelグラフ、一見きれいにできているかもしれません。しかし、棒の高さや点の位置が具体的に「いくつ」なのか、見る人が正確に読み取るのは意外と難しいものです。

この記事は、そんなあなたのグラフを**「なんとなく」から「一目瞭然」へ**と進化させるためのものです。

その鍵を握るのが、openpyxlの**DataLabelList**オブジェクト。これは、グラフ上の各データ点に付与する「値札」や「名札」のようなもの(データラベル)を、まとめて管理するための機能です。

openpyxlで基本的なグラフは作れるようになった方が、もう一歩進んで、より情報量豊かで分かりやすい資料を自動作成するテクニックを、サンプルコード付きで丁寧に解説します。


DataLabelListの基本:まずはグラフに数値を表示してみよう

結論から言うと、グラフにデータラベルを追加するには、Chartオブジェクトが持つdLbls(Data Labelsの略)というプロパティを操作します。ここに設定を施すことで、ラベルの表示を有効にできます。

では、具体的な手順を見ていきましょう。

ステップ1: DataLabelListのインポートとグラフの準備

まず、DataLabelListクラスをインポートし、ラベルを追加したいグラフの準備をします。ここではシンプルな棒グラフを例にします。

import openpyxl
from openpyxl.chart import BarChart, Reference
# DataLabelListをインポート
from openpyxl.chart.label import DataLabelList

# このバージョンで動作確認しています
print(f"openpyxlのバージョン: {openpyxl.__version__}")
# >> openpyxlのバージョン: 3.1.2

# ワークブックとシートを準備
wb = openpyxl.Workbook()
ws = wb.active
ws.title = "データラベル実践"

# グラフの元になるサンプルデータ
rows = [
    ["商品", "販売数"],
    ["A", 150],
    ["B", 220],
    ["C", 180],
    ["D", 250],
]
for row in rows:
    ws.append(row)

# 基本的なグラフを作成
chart = BarChart()
data = Reference(ws, min_col=2, min_row=1, max_row=5)
cats = Reference(ws, min_col=1, min_row=2, max_row=5)
chart.add_data(data, titles_from_data=True)
chart.set_categories(cats)
chart.title = "商品別 販売数"
chart.legend = None

ステップ2: DataLabelListオブジェクトを作成し、表示設定を行う

次に、DataLabelListのインスタンス(実体)を作成します。そして、最も重要なプロパティである**showVal (show Value) を True に設定**します。これが「値を表示してください」という命令になります。

# DataLabelListオブジェクトを作成
dLbls = DataLabelList()

# 値の表示を有効にする
dLbls.showVal = True

ステップ3: 作成したDataLabelListをグラフに適用する

最後に、設定済みのDataLabelListオブジェクトを、ChartオブジェクトのdLblsプロパティに代入します。これでグラフに設定が反映されます。

# グラフにデータラベルの設定を適用
chart.dLbls = dLbls

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

print("データラベル付きのExcelファイルを保存しました。")

この3ステップを実行するだけで、各棒グラフの上にその値(150, 220, 180, 250)が表示された、格段に分かりやすいグラフが完成します。


応用テクニック:DataLabelListでデータラベルを自由自在にカスタマイズ

値の表示は基本中の基本です。DataLabelListは、さらに細やかなカスタマイズを可能にする多くのプロパティを持っています。

表示内容を豊かにする(値、カテゴリ名、系列名)

showVal以外にも、ラベルに何を表示するかをコントロールするプロパティがあります。

  • showVal: を表示 (True/False)
  • showCatName: カテゴリ名(横軸の項目名)を表示 (True/False)
  • showSerName: 系列名(凡例名)を表示 (True/False)
  • showPercent: パーセンテージを表示(円グラフなどで有効)(True/False)

これらを組み合わせることも可能です。例えば、カテゴリ名と値を両方表示したい場合は以下のようにします。

dLbls = DataLabelList()
dLbls.showCatName = True
dLbls.showVal = True
# カテゴリ名と値の区切り文字を改行にする
dLbls.separator = '\n' 

ラベルの表示位置を調整する

dLblPos (Data Label Position) プロパティを使えば、ラベルの表示位置を変更できます。

  • 'outEnd': 外側の端(棒グラフのてっぺんなど)【デフォルト】
  • 'inEnd': 内側の端(棒グラフの内側のてっぺん)
  • 'ctr': 中央
  • 'inBase': 根元
# ラベルの位置を棒グラフの中央に設定
dLbls.dLblPos = 'ctr'

数値の表示形式(フォーマット)を変更する

numFmt (Number Format) プロパティは、Excelのセルの書式設定と同じように、数値の見た目を整える機能です。これは非常に強力です。

# 3桁区切りのカンマを付け、末尾に「個」を付ける
dLbls.numFmt = "#,##0\"個\""

# 小数点第一位までのパーセンテージで表示
# dLbls.numFmt = "0.0%"

ラベルのフォントや色を設定する

少し高度な使い方になりますが、txPr (Text Properties) プロパティを操作することで、ラベルの文字色や太さ、サイズなども変更できます。

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

# 文字を太字・白色に設定する例
cp = CharacterProperties(latin='Meiryo UI', b=True, solidFill="FFFFFF")
pp = ParagraphProperties(defRPr=cp)
rt = RichText(p=[Paragraph(pPr=pp, endParaRPr=cp)])

dLbls.txPr = rt
# 位置を内側にしないと見えない
dLbls.dLblPos = 'inEnd'

まとめ:DataLabelListを使いこなし、ワンランク上のグラフ自動化へ

今回は、openpyxlでグラフの見た目を劇的に改善するDataLabelListについて解説しました。

  • データラベルの操作は、ChartオブジェクトのdLblsプロパティが起点です。
  • まずはDataLabelList()を作成し、**showVal = True**を設定することが基本の第一歩です。
  • 表示内容 (showCatNameなど)、位置 (dLblPos)、数値書式 (numFmt) をカスタマイズすることで、グラフの表現力は格段に向上します。

グラフに適切なデータラベルを添えることは、その資料を見る人への「配慮」です。手間のかかるこの作業も、openpyxlを使えば一瞬で完了します。ぜひDataLabelListをマスターして、あなたのExcel業務自動化をさらに高いレベルへと引き上げてください。

コメント

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