はじめに
グラフの作成は範囲の指定だったり、タイトルの追加だったり、単純作業として時間がかかってしまう。
私の会社では古い機械で測定をすることが多く、エクセルのフォーマットが複雑でpandas
で扱いにくい場合が多い。
openpyxl
を用いて.xlsx
のグラフの作成を自動化することを目標とする。
環境
python 3.7.8
window 10
Data
自分が会社で扱うデータを再現したエクセルでデータ同士が離れている。(実際はもっと複雑で前処理が必要)
Code
ファイルの開いてシートを選ぶ
import openpyxl
file_path = './excel_file.xlsx'
## .xlsxの場合
wb = openpyxl.load_workbook(file_path)
## xlsmの場合
wb = openpyxl.load_workbook(file_path , keep_vba=True)
## 名前でシートを指定
ws = wb['Sheet1']
## indexでシートを指定
ws = wb.worksheets[0]
グラフ生成およびタイトルの指定
# create a graph
chart = openpyxl.chart.ScatterChart('marker')
# data titles
chart.title = 'Rheometer'
chart.x_axis.title = 'Time'
chart.y_axis.title = 'torque'
グラフにデータを追加
x軸はdata
、y軸はtime
としてデータを追加した。
また、散布図を目標とするので、series.graphicalProperties.line.noFill = True
とする。
# add series
print('adding serials')
for i in range(2):
#titleを含む範囲
data = openpyxl.chart.Reference(ws, min_col=4 + i*2 , min_row=2, max_row=22)
#titleを含まない範囲
time = openpyxl.chart.Reference(ws, min_col=2, min_row=3, max_row=22)
series = openpyxl.chart.Series(data, time, title_from_data=True)
series.graphicalProperties.line.noFill = True
series.marker.symbol = "circle"
chart.series.append(series)
範囲指定とファイル保存
# 値の範囲を指定
chart.y_axis.scaling.min = 0
chart.y_axis.scaling.max = 10
chart.x_axis.scaling.min = 0
chart.x_axis.scaling.max = 20
# このセルに貼り付け
ws.add_chart(chart, 'B8')
wb.save('./excel_file isDone.xlsx')
結果
まとめ
グラフ作成は以下の手順で行われる。
ファイル読み込み → グラフ作成 → データ追加 → 保存