openpyxlでグラフを作成する方法を紹介します。グラフの種類によってインポートするものが違うので、ここでは棒グラフ作成方法を紹介します。
その他のグラフの作成方法はこちらをご覧ください。円グラフ作成、折れ線グラフ作成
1.アウトプットイメージ
まずはイメージを掴んでもらうため、完成グラフとコードを紹介します。
import openpyxl
#棒グラフ、適応範囲、軸の最大・最小値を設定するのに必要なクラスのインポート
from openpyxl.chart import BarChart, Reference
from openpyxl.chart.axis import Scaling
#グラフの基となるデータファイルのロード
wb = openpyxl.load_workbook('C:/Users/1/Desktop/python/openpyxl/棒グラフ作成.xlsx')
ws = wb['棒グラフ']
#軸の参照データを指定
item_x = Reference(ws, min_col=1, min_row=2, max_row=13)
item_y = Reference(ws, min_col=2, max_col=3, min_row=1, max_row=13)
#グラフのプロパティ設定
chart = BarChart()
chart.height =10; chart.width = 15
chart.y_axis.scaling = Scaling(min =0, max = 200)
chart.y_axis.majorUnit = 50
chart.title = '月別売上'
chart.legend = None
#グラフの値を追加
chart.add_data(item_y, titles_from_data=True)
chart.set_categories(item_x)
ws.add_chart(chart, 'E3')
wb.save('C:/Users/1/Desktop/python/openpyxl/棒グラフ作成.xlsx')
2.コードの説明
※コード説明前の注意事項
本記事ではopenpyxl 3.1.2の環境で実行しています。
以前3.1.5で実行した際にx軸、y軸の数字が表示されないなど、意図通りに動かないことがありましたので、必要に応じて3.1.2をインストールしてください。
pip uninstall openpyxl:現在のopenpyxlをアンインストール
pip install openpyxl==3.1.2:3.1.2のインストール
ここからコードの説明です。
from openpyxl.chart import BarChart, Reference
棒グラフ作成と参照範囲を指定する際に必要なクラスです。基本的に棒グラフを作成する際は使用します。
from openpyxl.chart.axis import Scaling
グラフ軸の範囲を指定する際に必要なクラスです。
item_x = Reference(ws, min_col=1, min_row=2, max_row=13)
item_y = Reference(ws, min_col=2, max_col=3, min_row=1, max_row=13)
それぞれx軸、y軸の参照範囲を示しています。x軸がA2~A13、y軸がB1~C13のデータを参照しています。(col=列、row=行)
chart = BarChart() :変数chartに棒グラフを定義。
chart.height =10; chart.width = 15 :グラフのサイズを高さ10、幅15に指定。
chart.y_axis.scaling = Scaling(min =0, max = 200) :y軸の表示範囲を0~200の範囲に指定。
chart.y_axis.majorUnit = 50 :y軸の目盛の表示単位を50に指定。
chart.title = ‘月別売上’ :グラフタイトルを定義。
chart.legend = None :凡例表示を無効。
chart.add_data(item_y, titles_from_data=True)
:取得した各月の値を加えています。”titles_from_data=True”でB1行をグラフの値でなく表題と定義しています。
chart.set_categories(item_x) :取得した月を横軸に登録。
ws.add_chart(chart, ‘E3’) :グラフの左上をE3に設定。
3.積み上げ棒グラフにするには
棒グラフの種類の指定を変えることで積み上げグラフにすることもできます。
コードは”chart = BarChart()”の下に
chart.grouping = ‘stacked’
chart.overlap = 100
と追加するだけです。
また積み上げると数値が200を超えるので、y軸の範囲を0~350にしています。
・chart.grouping = ‘stacked’
グラフの表示形式を積み上げ方式にする。この記載がないと先ほどの集合縦棒方式になります。
・chart.overlap = 100
グラフ青塗り部分とオレンジ部分のラップ(重なり)の%を0~100の範囲で指定。100で縦並びに、0で下図のようにズレた積み上げグラフになります(デフォルト0)。
4.終わりに
openpyxlでの棒グラフ作成のしかたを紹介しました。グラフ作成時に設定できる項目は他にもありますが、他の形のグラフと共通しているものが多いので、そちらは別途一覧として紹介したいと思います。