とある部品の「価格」と「強度」をまとめて「散布図」を作ることになった…。
1度だけなら手動で作るけど、今後も同じようなものを作る必要がありそうだから、
openpyxlを使って素早く散布図を作れないかな…?
作れますよ!
できるだけ簡単な方法を解説いたします!
【著者情報】
Python歴3年。
入社2年目の春に先輩が突然トンズラし、業務を半分肩代わりするハメに…。
今までの1.5倍の仕事をこなせるはずもなく、苦しむ毎日。
業務効率化を模索中にPythonと出合う。
業務とPythonの相性が良く、2倍以上の効率化を実現。現在も効率化を進行中。
openpyxlで散布図を作成するには
「chart(ScatterChart)」を使います。まずは実行見本をどうぞ。
実行見本
全コード
ひとまず全コードを網羅します。解説は後ほど行います。
import openpyxl
from openpyxl.chart import ScatterChart, Reference, Series
wb = openpyxl.load_workbook('input.xlsx')
ws = wb['Sheet1']
kyoudo = Reference(ws, min_col=2, min_row=2, max_col=2, max_row=11)
kakaku = Reference(ws, min_col=3, min_row=2, max_col=3, max_row=11)
chart = ScatterChart()
series = Series(kyoudo, kakaku)
series.marker.symbol = 'auto'
series.graphicalProperties.line.noFill = True
chart.series.append(series)
ws.add_chart(chart, 'E1')
wb.save('input.xlsx')
事前準備
- openpyxlのインストール
既存のエクセルファイルを編集するには「openpyxl」のインストールが必要です。
openpyxlのインストール方法
openpyxlを初めて使用する場合は、下記コードを入力・実行して、インストールしてください。
pip install openpyxl
※openpyxlを使用したことがある場合は、このインストール作業は不要です。
openpyxlの基礎解説
既存ファイルを開いて保存する方法などの操作の基本解説は、下記記事で行っております。
ご参考ください。
解説
※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
インポート
import openpyxl
from openpyxl.chart import ScatterChart, Reference, Series
上記記述をすることで、散布図作成に必要な「chart」などをインポートすることができます。
データの取得
kyoudo = Reference(ws, min_col=2, min_row=2, max_col=2, max_row=11)
kakaku = Reference(ws, min_col=3, min_row=2, max_col=3, max_row=11)
まずは、散布図を作成するためのデータを取得して、変数に代入します。
取得するのは、B列の「強度」とC列の「価格」です。
「強度」はエクセルの「B2~B11」セルを取得します。
「価格」は「C2~C11」です。
データ取得の詳細は下記記事でわかりやすく解説しております。ご参考ください。
グラフを作成
chart = ScatterChart()
series = Series(kyoudo, kakaku)
series.marker.symbol = 'auto'
series.graphicalProperties.line.noFill = True
chart.series.append(series)
ws.add_chart(chart, 'E1')
上記記述をすることで、前項で取得したデータを元に散布図を作成することができます。
1つ1つ解説していきましょう。
chart = ScatterChart()
上記一文にて、グラフの種類(散布図)をひとまず変数に代入します。
series = Series(kyoudo, kakaku)
次に、7~8行目で取得した「強度」と「価格」のデータを「Series」を使って変数に代入します。
()内に書いた1つ目がX軸、2つ目がY軸になります。
【 変数 = Series(X軸(横軸)に表示させたいデータ, Y軸(縦軸)に表示させたいデータ) 】
series.marker.symbol = 'auto'
series.graphicalProperties.line.noFill = True
散布図の設定をします。
(デフォルトの「線のみ表示」→「点のみ表示」に変更)
12行目:シンボル(点)を表示させます
13行目:点と点をつなぐ線を非表示にします
chart.series.append(series)
seriesデータ(11行目で「強度」と「価格」をまとめたもの)を「append」で変数「chart」に追加します。
「append」の解説は下記記事で行っております。ご参考ください。
ws.add_chart(chart, 'E1')
グラフを作る位置を指定します。
‘E1’はエクセル内の「E1セル」を指すため、
上記コードでは、「E1セル」にグラフを作成することができます。
以上で上図見本のような散布図を作成することができます。
今回はわかりやすく「kyoudo」や「kakaku」のような変数名にしましたが、
通常は「x_data」や「y_data」のような名前にすると、汎用性が高くなります。
うまく動作しない時
エラーが出る
No such file or directory: ○○
これは、読み込むファイルやフォルダが見つからないというエラーです。
読み込むファイルのファイル名と構文のファイル名が一致しているか確認しましょう。
詳しい解説は、下記記事をご参考ください。
Permission denied: ○○
操作しようとしているファイルにアクセスできないというエラーです。
「ファイルを開いている状態なので編集できない」と言っていることが多いので、開いていれば閉じて再度トライしましょう。
詳しい解説は、下記記事をご参考ください。
Worksheet ○○ does not exist
「指定したシートがありません」というエラーです。
指定のシート名が間違っていないか、「sheet1」など先頭が小文字になっていないか確認しましょう。
詳しい解説は、下記記事をご参考ください。
○○ is not defined
今まで出てきていない変数などを処理しようとした時に出るエラーです。
変数名などが間違っていないかチェックしましょう。
詳しい解説は、下記記事をご参考ください。
その他のエラー
その他のエラーが出た場合は、エラー文をコピーしてNETで検索してみましょう。
最後に
openpyxlで散布図を作成する方法を解説いたしました。
グラフの作成には「chart」を使うということを頭の片隅に置いておいてください。
当ブログでは、Pythonに関する情報を配信しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
最後までお読みいただき、ありがとうございました。がんばってください!