【Excel x Python】 openpyxlを使って面倒なExcelのグラフ作成作業を自動化する【Pythonで自動化】

title_openpyxl

openpyxlを使用してExcelのグラフ作成を自動化する方法を紹介します。

エンジニアならばデータの可視化ならMatplotlibでいいじゃないか!?と思いがちですが、一般的にExcelでデータを残して欲しいという要望は多いと思います。

でも、Excelのグラフ作成は意外と面倒な作業です。
Excelのグラフ作成がルーチンワーク化している作業ならば、尚更、Pyothonでサクッと終わらすことが出来てしまえばうれしい限りです。

幸いにしてPythonにはExcelを操作するライブラリが沢山そろっています。
今回はその中の1つ、openpyxlを使用してExcelのグラフ作成作業を自動化する方法を紹介します。

openpyxlを使えば、Excelでデータを残す為に頑張ってVBAを使う必要もありません。

アンチExcelな人は、openpyxlを使って面倒なExcelの作業から解放されましょう。

スポンサーリンク

環境

今回使用したPythonとopenpyxlのバージョンは以下の通りです。なお、環境構築はAnacondaを使用しております。

  • Python = 3.6.10
  • openpyxl = 3.0.3
スポンサーリンク

モジュールのインポートとExcelへ書き込み

WorkbookScatterChartReferenceSeriesをインポートし、以下の手順でExcelに書き込みます。

  1. Excelへの書き込むためには、まず、Workbookでワークブック作成します。
  2. 次に、ワークブックオブジェクトのcreate_sheet()メソドットでワークシートを作成します。
  3. そして、ワークシートオブジェクトのcell()メソッドを使用して書き込みます。
#今回使うモジュールの読み込み
from openpyxl import Workbook
from openpyxl.chart import ScatterChart, Reference, Series

#openpyxlのバージョンを表示
print(openpyxl.__version__)
#作成するExcelファイル名
filename = "openpyxl_chart.xlsx"
#ワークブックの作成
wb = Workbook()
#ワークシートの作成。第1引数にシート名、第2引数に挿入位置
ws = wb.create_sheet("sheet01", 0)

#データ作成
X = np.arange(0, 100, 5)
Y1 = X
Y2 = 2 * X 
Y3 = 3 * X

len_data = len(X)

#セルへの書き込み.row=1でA行、column=1で1列目を選択
#A1セルへ書き込み
ws.cell(row = 1, column = 1, value = "X")
#B1セルへ書き込み
ws.cell(row = 1, column = 2, value = "Y1")
#C1セルへ書き込み
ws.cell(row = 1, column = 3, value = "Y2")
#D1セルへ書き込み
ws.cell(row = 1, column = 4, value = "Y3")

for i in range(0, len_data):
	ws.cell(row= i + 2, column = 1, value = X[i])
	ws.cell(row= i + 2, column = 2, value = Y1[i])
	ws.cell(row= i + 2, column = 3, value = Y2[i])
	ws.cell(row= i + 2, column = 4, value = Y3[i])
スポンサーリンク

グラフの作成

Excelに書き込みが出来たら、グラフを作成します。今回は散布図を作成します。

最初のコードに書いてあるように、ScatterChart、Reference、Seriesをインポートします。

from openpyxl.chart import ScatterChart, Reference, Series
  1. ScatterChartオブジェクトを作成します。
  2. X軸とY軸の範囲設定の為にReferenceオブジェクトを作成します。
    Reference()にワークシートオブジェクトと選択範囲を渡します。
    選択開始位置をmin_row(行)min_col(列)で指定し、選択終了位置はmax_rowmax_colで指定します。
  3. 系列を追加する為にSeriesオブジェクトを作成します。Series()にX、Y軸設定用のReferenceオブジェクトを渡します。
#ScatterChartオブジェクトを作成
chart = ScatterChart()

num_series = 3
min_row = 2
max_row = min_row + len_data - 1

#グラフのX軸の範囲を設定する為に、Referenceオブジェクト作る
x_values = Reference(ws, min_col = 1, min_row = min_row, max_row = max_row)

#データの書き込み
for i in range(0, num_series):
	min_col = i + 2
  #データの範囲(Y軸)をReferenceで選択
	values = Reference(ws, min_col = min_col, min_row = min_row, max_row = max_row)
  #Seriesオブジェクトを作成
	series = Series(values, x_values, title="hoge")

このようなグラフが作成されます。

scatter chart made by openpyxl
スポンサーリンク

グラフの体裁を整える

グラフの見た目を簡単に整えます。
フォントや線の太さを変えるのは少々複雑なので、今回は細かい設定はせず、ザックリと見た目を変えます。

グラフの大きさ、タイトル、凡例の調整

グラフの大きさはチャートオブジェクトのheightプロパティwidthプロパティで調整します。
タイトル、凡例はチャートオブジェクトのtitleプロパティlegendプロパティで設定します。

#グラフの大きさ
chart.height = 10
chart.width = 10
#グラフの大きさ
chart.title = "Hoge"
#凡例
chart.legend = None

軸の調整

軸の調整はx_axisy_axisプロパティで行います。

#目盛間隔
chart.x_axis.majorUnit = 10
chart.y_axis.majorUnit = 20
#補助目盛間隔
chart.x_axis.minorUnit = 5
chart.y_axis.minorUnit = 10
#グリッドラインを消す
chart.y_axis.majorGridlines = None
chart.x_axis.majorGridlines = None
#軸の向き(out, corss, inから選ぶ)
chart.x_axis.majorTickMark = "in"
chart.x_axis.minorTickMark = "in"
chart.y_axis.majorTickMark = "in"
chart.y_axis.minorTickMark = "in"
modified chart

以上です。
線の太さやフォントの設定は少々面倒なので、別の機会に説明します。

タイトルとURLをコピーしました