pythonで、matplotlibで作成したグラフをExcelに貼り付ける方法について紹介します。
本記事では、下記内容を紹介しています。
この記事で分かること
■matplotlibで作成したグラフをExcelに貼り付ける方法
- グラフを画像として保存した後に、Excelに貼り付ける方法
- グラフを画像として保存せず、PCメモリに保持して、Excelに貼り付ける方法
スポンサーリンク
matplotlibで作成したグラフをExcelに貼り付ける方法
matplotlibで作成したグラフをExcelに貼り付ける方法について紹介します。
以下の2つの方法について、サンプルコードを交えながら順番に紹介します。
- グラフを画像として保存した後に、Excelに貼り付ける方法
- グラフを画像として保存せず、PCメモリに保持して、Excelに貼り付け
グラフを画像として保存した後に、Excelに貼り付け
はじめに、matplotlibで作成したグラフを画像として保存した後に、
Excel操作用のライブラリである「openpyxl」を使用して、Excelに貼り付ける方法を紹介します。
以下、サンプルコードです。
### matplotlibで作成したグラフをExcelに貼り付け
import matplotlib.pyplot as plt
import openpyxl
# -------------------- グラフを作成 ------------------- #
data_x = [1,2,3,4,5]
data_y = [x*x for x in data_x]
fig = plt.figure(figsize = (5,5), facecolor="lightblue")
plt.xlabel("X")
plt.ylabel("Y")
plt.plot(data_x, data_y, linestyle='solid', marker='o')
plt.show()
fig_path = r'test\test.png'
fig.savefig(fig_path)
# --------------- ここまでグラフを作成 -------------- #
# 既存のExcelファイルを開き、新しいsheetを作成
excel_path = r'test\test.xlsx'
wb = openpyxl.load_workbook(excel_path)
sh = wb.create_sheet('graph')
# openpyxlで画像を読み込み、エクセルに貼り付け
img = openpyxl.drawing.image.Image(fig_path)
sh.add_image(img, 'B2')
# 変更を保存
wb.save(excel_path)
wb.close()
コードを実行すると、下図のようにExcelにグラフが貼り付けられます。

前半部では、matplotlibでグラフを作成し、savefigメソッドで図として保存しています。
後半部分で、openpyxlを用いて、グラフをExcelに貼り付けています。
> wb = openpyxl.load_workbook(excel_path)
> sh = wb.create_sheet('graph')
既存のExcelファイルを開き、新しいsheetを作成しています。
> img = openpyxl.drawing.image.Image(fig_path)
> sh.add_image(img, 'B2')
openpyxlで図を読み込み、先ほど作成したsheetの "B2セル" に貼り付けています。
スポンサーリンク
【補足】グラフを画像として保存せず、PCメモリに保持して、Excelに貼り付け
次に、matplotlibで作成したグラフをPCのメモリに保持し、
Excel操作用のライブラリである「openpyxl」を使用して、Excelに貼り付ける方法を紹介します。
以下、サンプルコードです。
### matplotlibで作成したグラフをExcelに貼り付け
import matplotlib.pyplot as plt
import openpyxl
import io
# -------------------- グラフを作成 ------------------- #
data_x = [1,2,3,4,5]
data_y = [x*x for x in data_x]
fig = plt.figure(figsize = (5,5), facecolor="lightblue")
plt.xlabel("X")
plt.ylabel("Y")
plt.plot(data_x, data_y, linestyle='solid', marker='o')
plt.show()
# --------------- ここまでグラフを作成 -------------- #
# 既存のExcelファイルを開き、新しいsheetを作成
excel_path = r'test\test.xlsx'
wb = openpyxl.load_workbook(excel_path)
sh = wb.create_sheet('graph')
# PCのメモリに画像を保存
img_data = io.BytesIO()
fig.savefig(img_data, format='png')
# openpyxlで画像を読み込み、エクセルに貼り付け
img = openpyxl.drawing.image.Image(img_data)
sh.add_image(img, 'B2')
# 変更を保存
wb.save(excel_path)
wb.close()
コードの実行結果は、前述のサンプルコードと同じになります。
先ほどのコードとの違いは、1箇所だけです。
先ほどは、グラフを画像として保存してしましたが、こちらのコードでは、PCのメモリにグラフを保存しています。
> img_data = io.BytesIO()
> fig.savefig(img_data, format='png')
ioモジュールは、pythonの標準モジュールです。
BytesIOを用いることで、メモリ上でバイナリデータを扱うことができます。
savefigメソッドで、グラフをメモリに保存しています。
ioモジュールについてもっと詳しく知りたい方は、pythonの公式ドキュメントを参照してみてください。