はじめに
円グラフを作成した際、「その他」の項目が大部分を占めてしまい、詳細が分からなくなってしまった経験はありませんか?Excelで手作業で調整するのは少し面倒ですよね。
この記事では、Pythonのopenpyxlライブラリを使って、その**「その他」の内訳を分かりやすく可視化できる「補助円グラフ付き円グラフ(ProjectedPieChart)」**を作成する方法を、初心者にも分かりやすく解説します。
この記事を読めば、Excelのグラフ作成をPythonで自動化し、より伝わりやすい資料を効率的に作成できるようになります。
そもそもProjectedPieChartとは?
ProjectedPieChartは、メインの円グラフの一部を、別の補助グラフ(棒グラフまたは円グラフ)で詳しく示すためのグラフです。Excelでは「補助円グラフ付き円グラフ」や「補助縦棒グラフ付き円グラフ」として知られています。
円グラフの「その他」項目を分かりやすく分解するグラフ
ProjectedPieChartの最大のメリットは、円グラフの細かい項目を「その他」として一つにまとめつつ、その内訳を補助グラフで詳細に表示できる点です。
例えば、多くの項目があるアンケート結果などで、上位項目だけをメインの円グラフで示し、下位の項目群を補助グラフで内訳表示する際に非常に役立ちます。これにより、全体像と細部の両方を一度に示すことができ、非常に見やすいデータ表現が可能になります。
補助グラフは「棒グラフ」と「円グラフ」の2種類
openpyxlでは、補助グラフの形式を以下の2種類から選べます。どちらを使うかは、見せたいデータの内容によって選択します。
BarChartOfPie: 補助グラフが棒グラフになるタイプです。(補助縦棒グラフ付き円グラフ)PieChartOfPie: 補助グラフも円グラフになるタイプです。(補助円グラフ付き円グラフ)
準備:openpyxlのインストールとサンプルデータ
それでは、グラフを作成するための準備を行いましょう。コーディングに入る前に、必要なライブラリをインストールし、使用するデータを確認します。
openpyxlをインストールする
openpyxlライブラリがまだインストールされていない場合、ターミナルやコマンドプロンプトで以下のpipコマンドを実行してください。
pip install openpyxlopenpyxlはPythonでExcelファイル(.xlsx)を読み書きするための定番ライブラリです。
グラフ化するExcelデータを用意する
今回は、以下のようなWebサイトへの流入元データがあると仮定します。このデータをPythonを使ってExcelファイルに書き込むところから始めます。
| 流入元 | ページビュー数 |
| 1500 | |
| Yahoo | 800 |
| 600 | |
| 300 | |
| 120 | |
| Line | 80 |
| その他 | 50 |
このデータのうち、ページビュー数が少ない下位3つ(Instagram, Line, その他)を補助グラフで表示するケースを想定して進めていきます。
基本編:補助棒グラフ付き円グラフ (BarChartOfPie) の作り方
それでは、実際にProjectedPieChartを作成していきます。まずは最も基本的な補助棒グラフ付きのパターンであるBarChartOfPieから見ていきましょう。
Step 1: 必要なライブラリをインポート
まず、openpyxlからExcelブックを操作するためのWorkbookと、グラフ作成に必要なReference, Series, BarChartOfPieをインポートします。
from openpyxl import Workbook
from openpyxl.chart import BarChartOfPie, Reference, SeriesStep 2: Excelブックとシートを準備
新しいExcelブックを作成し、先ほどのサンプルデータを書き込みます。Pythonのリスト形式でデータを持っておくと、繰り返し処理で簡単にセルに書き込めます。
# 新しいワークブックを作成
wb = Workbook()
ws = wb.active
ws.title = "PV Data"
# サンプルデータをリストで定義
data = [
['流入元', 'ページビュー数'],
['Google', 1500],
['Yahoo', 800],
['Twitter', 600],
['Facebook', 300],
['Instagram', 120],
['Line', 80],
['その他', 50],
]
# データをシートに書き込む
for row in data:
ws.append(row)Step 3: グラフのデータ範囲 (Reference) を指定
次に、グラフに描画したいデータの範囲と、各データのラベル(項目名)の範囲をReferenceオブジェクトで指定します。
- ラベルの範囲: A2セルからA8セルまで(”Google”から”その他”まで)
- データの範囲: B2セルからB8セルまで(1500から50まで)
# データの範囲を指定
labels = Reference(ws, min_col=1, min_row=2, max_row=8)
data = Reference(ws, min_col=2, min_row=2, max_row=8)Step 4: ProjectedPieChartオブジェクトを作成
BarChartOfPieクラスを使って、グラフオブジェクト本体を作成します。この時点ではまだ空のグラフです。
# 補助棒グラフ付き円グラフを作成
chart = BarChartOfPie()Step 5: グラフをシートに追加して保存
作成したグラフオブジェクトにデータ範囲を追加し、worksheet.add_chart()でシートの好きな位置に追加します。最後にExcelファイルを保存して完成です。
# グラフにデータを追加
chart.add_data(data, titles_from_data=False)
chart.set_categories(labels)
# グラフタイトルを設定
chart.title = "Webサイト流入元"
# シートのD2セルにグラフを追加
ws.add_chart(chart, "D2")
# Excelファイルを保存
wb.save("projected_pie_chart_basic.xlsx")ここまでの全コード
Step1からStep5までをまとめた、コピー&ペーストで動作するコード全体は以下のようになります。
from openpyxl import Workbook
from openpyxl.chart import BarChartOfPie, Reference
# --- 1. Excelブックとデータの準備 ---
wb = Workbook()
ws = wb.active
ws.title = "PV Data"
data_rows = [
['流入元', 'ページビュー数'],
['Google', 1500],
['Yahoo', 800],
['Twitter', 600],
['Facebook', 300],
['Instagram', 120],
['Line', 80],
['その他', 50],
]
for row in data_rows:
ws.append(row)
# --- 2. グラフの作成 ---
chart = BarChartOfPie()
chart.title = "Webサイト流入元"
# --- 3. データの範囲設定 ---
labels = Reference(ws, min_col=1, min_row=2, max_row=8)
data = Reference(ws, min_col=2, min_row=2, max_row=8)
chart.add_data(data, titles_from_data=False)
chart.set_categories(labels)
# --- 4. グラフの追加と保存 ---
# 下から3つの項目を補助グラフに移動
chart.splitType = 'pos'
chart.splitPos = 3
ws.add_chart(chart, "D2")
wb.save("projected_pie_chart_basic.xlsx")
print("グラフが作成されたExcelファイルを保存しました。")このコードを実行すると、下位3項目が補助棒グラフで表示されたExcelファイルが生成されます。
応用編:ProjectedPieChartを自由自在にカスタマイズする
基本的な作り方を覚えたら、次はグラフをより見やすく、意図通りにカスタマイズする方法を見ていきましょう。
補助グラフを円グラフに変更する (PieChartOfPie)
補助グラフを棒グラフではなく、円グラフに変更する方法は非常に簡単です。BarChartOfPieの代わりにPieChartOfPieクラスを使うだけで実現できます。
# from openpyxl.chart import BarChartOfPie
from openpyxl.chart import PieChartOfPie # ここを変更
# chart = BarChartOfPie()
chart = PieChartOfPie() # ここを変更これだけで、補助グラフが円グラフの形式になります。
グラフの分割方法を指定する (splitType)
メインの円グラフから補助グラフにどのデータを含めるかは、splitTypeプロパティで柔軟に指定できます。
pos: 位置で分割(デフォルト) 下からN個のデータを補助グラフへ移動させます。Pythonchart.splitType = 'pos' chart.splitPos = 3 # 下から3つのデータを補助グラフへval: 値で分割 指定した値よりも小さいデータを補助グラフへ移動させます。Pythonchart.splitType = 'val' chart.splitVal = 200 # 値が200未満のデータを補助グラフへpercent: 割合で分割 全体のN%未満のデータを補助グラフへ移動させます。Pythonchart.splitType = 'percent' chart.splitVal = 10 # 全体の10%未満のデータを補助グラフへ
任意の位置でデータを分割する (custSplit)
splitTypeを使わず、もっと自由に「この項目とこの項目を補助グラフに表示したい」という場合があります。その際はcustSplitプロパティを使って、補助グラフに含めるデータ点を直接指定できます。
データは0から始まるインデックスで指定します。例えば、「Instagram(4番目)」「Line(5番目)」「その他(6番目)」を補助グラフに含めるには以下のように記述します。
# splitTypeは指定しない
# chart.splitType = 'pos'
# 補助グラフに含めるデータ点のインデックスをリストで指定
chart.custSplit = [4, 5, 6] custSplitを使えば、隣接していないデータでも自由に補助グラフにまとめることができ、非常に強力です。
グラフタイトルとデータラベルを設定する
グラフにタイトルを付けたり、各データにラベル(数値やパーセンテージ)を表示させたりして、より分かりやすいグラフに仕上げましょう。
# グラフタイトルの設定
chart.title = "Webサイト流入元分析 (2025年上半期)"
# データラベルの設定
chart.dataLabels.showVal = True # 値を表示
chart.dataLabels.showPercent = True # パーセンテージを表示
chart.dataLabels.showCatName = True # カテゴリ名(項目名)を表示dataLabelsプロパティにTrueを設定することで、様々な情報をグラフ上に表示できます。
まとめ
この記事では、Pythonのopenpyxlライブラリを使用して、補助円グラフ付き円グラフ(ProjectedPieChart)を作成する方法を、基本から応用まで徹底的に解説しました。
ProjectedPieChartで「その他」の内訳を分かりやすく可視化できる- 補助グラフは棒グラフ (
BarChartOfPie) と円グラフ (PieChartOfPie) がある - データの範囲は
Referenceオブジェクトで指定する splitTypeやcustSplitで補助グラフに含めるデータを柔軟に設定できる- タイトルやデータラベルを設定してグラフの見た目を調整できる
Excelでの資料作成をPythonで自動化することで、作業効率は飛躍的に向上します。特に、定期的に同じフォーマットのグラフを作成するような業務では絶大な効果を発揮します。
ぜひ、ご自身の業務でもopenpyxlを活用してみてください。


コメント