Home » Python » OpenPyXLの使い方 » OpenPyXLでグラフを作成する基本

OpenPyXLでグラフを作成する基本

動作検証バージョン:64bit版 Windows 10 Pro + Python 3.8.0 + OpenPyXL 3.0.0

「棒グラフ openpyxl」
といった検索キーワードで、時折アクセスがあります。

公式ドキュメントにグラフを作成するサンプルが掲載されていますけれど、最初はもっとずっとシンプルな例で理解するほうが良さそうに感じます。

[スポンサードリンク]

OpenPyXLで棒グラフを作成するサンプルスクリプト

以上のようなデータが先頭シートに存在するブックを、Cドライブtempフォルダーにfoo.xlsxとして保存しておいてから、以下のスクリプトを実行すると、棒グラフの挿入されたfoo_bar_chart.xlsが作成されます。

import openpyxl
from openpyxl.chart import BarChart, Reference

book = openpyxl.load_workbook(r'C:\temp\foo.xlsx')
sheet = book.worksheets[0]

chart = BarChart()

values = Reference(sheet,
                min_row=1, min_col=2,
                max_row=4, max_col=3)
chart.add_data(values, titles_from_data=True)

xvalues = Reference(sheet,
                min_row=2, min_col=1,
                max_row=4, max_col=1)
chart.set_categories(xvalues)

sheet.add_chart(chart, 'A6')
book.save(r'C:\temp\foo_bar_chart.xlsx')

サンプルスクリプトで行っている処理

グラフ作成でもっとも重要なのは、凡例項目(系列)と横(項目)軸ラベルの設定です。

OpenPyXLの場合、系列はBarChartオブジェクトのadd_dataメソッドで、

>>> help(chart.add_data)
Help on method add_data in module openpyxl.chart._chart:

add_data(data, from_rows=False, titles_from_data=False) method of openpyxl.chart.bar_chart.BarChart instance
Add a range of data in a single pass.
The default is to treat each column as a data series.

項目軸ラベルはBarChartオブジェクトのset_categoriesメソッドで

>>> help(chart.set_categories)
Help on method set_categories in module openpyxl.chart._chart:

set_categories(labels) method of openpyxl.chart.bar_chart.BarChart instance
Set the categories / x-axis values

設定するのが、基本です。

凡例項目(系列)の設定

系列(系列名と系列値)の設定を行っているのが、

  values = Reference(sheet,
                  min_row=1, min_col=2,
                  max_row=4, max_col=3)
  chart.add_data(values, titles_from_data=True)
の部分です。

Referenceコンストラクターでセル範囲を指定する第2~5引数は、何故か、左上の列と行、右下の列と行の順に指定することになっていますが、セルを2つの数値を使って指定する場合は、「列・行」よりも「行・列」の順に並んでいるほうが私は理解しやすいので、上記のスクリプトでは、
                  min_row=1, min_col=2,
                  max_row=4, max_col=3)
と指定しています。

add_dataメソッドの引数titles_from_dataにTrueを指定することで、
  chart.add_data(values, titles_from_data=True)
第1引数に指定したReferenceオブジェクトの1行目が[系列名]として設定されます。

横(項目)軸ラベルの指定

[横(項目)軸ラベル]の設定を行っているのが、

  xvalues = Reference(sheet,
                  min_row=2, min_col=1,
                  max_row=4, max_col=1)
  chart.set_categories(xvalues)
の部分です。

Referenceコンストラクターでセル範囲を指定する部分は、先のadd_dataメソッドと同様、行・列の順になるように指定しています。

最終更新日時:2020-02-03 11:18

[スポンサードリンク]

Home » Python » OpenPyXLの使い方 » OpenPyXLでグラフを作成する基本

「OpenPyXLの使い方」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.