【Python】OpenPyXLでExcelの棒グラフを書いてみる

Excel

最も人気なプログラミング言語の一つであるPythonで、最も使用されている表計算ソフトExcelを自動で操作できたら、こんなに興奮することはありません。

本記事では、Excelを操作するPythonのモジュール、「OpenPyXL」でグラフを描画してみます。

プログラムの全体像

まず、Excelで実現するグラフを見てみましょう。

PythonでExcelの棒グラフを生成
このようなグラフをPythonプログラミングのみで作ります

次に、このデータの入力とグラフの出力をするためのプログラムを見てみます。

from openpyxl import Workbook
from openpyxl.chart import BarChart, Series, Reference

wb = Workbook()
ws = wb.active

rows = [
	('numbar','data1','data2'),
	(1,10,20),
	(2,20,40),
	(3,30,80),
	(4,40,160),
	(5,50,320),
	]

for row in rows:
	ws.append(row)
	
chart1 = BarChart()
chart1.type = "col"
chart1.style = 10
chart1.title = "棒グラフ"
chart1.y_axis.title = '数値'
chart1.x_axis.title = '長さ'

data = Reference(ws, min_col=2, max_col=3, min_row=1, max_row=6)
cats = Reference(ws, min_col=1, min_row=2, max_row=6)

chart1.add_data(data, titles_from_data=True)
chart1.set_categories(cats)
chart1.shape = 5
ws.add_chart(chart1, "A10")

wb.save('sample_chart.xlsx')

OpenPyXLでグラフを書く方法

それでは、上に書いたコードの解説をします。

1. 必要なモジュールをインポートする

まずは、必要なモジュールをインポートします。openpyxlからWorkbookをインポートすることで、Excelファイルを自在に操ることができるようになります。続けて棒グラフを描画するためのBarChart, Series, Referanceをインポートします。

from openpyxl import Workbook
from openpyxl.chart import BarChart, Series, Reference

2. Excelのシートを生成する

次に、Excelのシートを生成します。Excelファイル全体をワークブックと言い、エクセルのシートはその中にたくさん作ることができます。

  1. ワークブックの生成
  2. シートの生成

の順で作成します。

wb = Workbook() #Excelのワークブックを生成
ws = wb.active #Excelのワークシートを生成

3. データを入力する

rows = [
	('numbar','data1','data2'),
	(1,10,20),
	(2,20,40),
	(3,30,80),
	(4,40,160),
	(5,50,320),
	]

for row in rows:
	ws.append(row)

というコードを追加すれば、次の図のような3行6列の表を作ることができます。

Excelの表
このような表が生成されます

rowsというリストの中に、6つのタプルを格納しています。そして、for文でExcelのシートに順次追加していきます。

シートの変数であるwsappendメソッドを利用すれば、リストに似たような形で追加することができます。

4. グラフを生成する

chart1 = BarChart()
chart1.type = "col"
chart1.style = 10
chart1.title = "棒グラフ"
chart1.y_axis.title = '数値'
chart1.x_axis.title = '長さ'

の部分で、グラフを定義しています。BarChart( )を好きな変数に格納します。typeをcolにすることで、一般的な棒グラフになります。chart1.type = “bar”とすると、棒グラフは横方向のものになります。
styleに関しては、数字で指定します。本プログラムのように10とすると、上で紹介したような色のグラフになります。
titleに指定したものが、グラフのタイトルになります。また、y軸、x軸の名前はy_axis.titleとx_axis.titleで指定できます。

これらをまとめると、下の図のようになります。

PythonでのExcelグラフの定義
これらのメソッドによってグラフを定義します

グラフのデータを選択する

上で生成したグラフにデータを追加します。

data = Reference(ws, min_col=2, max_col=3, min_row=1, max_row=6)
cats = Reference(ws, min_col=1, min_row=2, max_row=6)

chart1.add_data(data, titles_from_data=True)
chart1.set_categories(cats)

Reference( )で参照したいデータを選択します。そして、add_data( )に縦軸に関するデータを、set_categories( )に横軸のカテゴリ名を与えてあげます。

OpenPyXLにおけるExcelのデータの参照
データの参照範囲

データはdata1とdata2の2種類あります。これらは2〜3行、2〜6列の範囲に格納されているので、min_col=2(最小の行番号は2)、max_col=3(最大の行番号は3)、min_row=1(最小の列番号は2)、max_row=6(最大の列番号は6)という引数をReference( )に、シートの変数に続けて格納してあげます。横軸のカテゴリも同じように指定して、add_data( )とset_categories( )に渡してあげます。

グラフの表示と保存

最後に、グラフを表示して、エクセルファイルとして保存しましょう。

ws.add_chart(chart1, "A10")
wb.save('sample_chart.xlsx')

とすると、chart1に格納されたグラフが、A10のセルから生成されます。
また、sample_chart.xlsxというファイル名でエクセルファイルが保存されます。

より発展したグラフの生成

以上で、OpenPyXLによる簡単なグラフの生成方法の解説を終わります。このほかにも、たくさんの種類のグラフを作ることができます。ぜひOpenPyXLの公式ページを見てみてください。

参考:OpenPyXL公式ページ、棒グラフの書き方