最も人気なプログラミング言語の一つであるPythonで、最も使用されている表計算ソフトExcelを自動で操作できたら、こんなに興奮することはありません。
本記事では、Excelを操作するPythonのモジュール、「OpenPyXL」でグラフを描画してみます。
Contents
プログラムの全体像
まず、Excelで実現するグラフを見てみましょう。
次に、このデータの入力とグラフの出力をするためのプログラムを見てみます。
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ファイル全体をワークブックと言い、エクセルのシートはその中にたくさん作ることができます。
- ワークブックの生成
- シートの生成
の順で作成します。
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列の表を作ることができます。
rowsというリストの中に、6つのタプルを格納しています。そして、for文でExcelのシートに順次追加していきます。
シートの変数であるwsにappendメソッドを利用すれば、リストに似たような形で追加することができます。
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で指定できます。
これらをまとめると、下の図のようになります。
グラフのデータを選択する
上で生成したグラフにデータを追加します。
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( )に横軸のカテゴリ名を与えてあげます。
データは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の公式ページを見てみてください。