matplotlib ライブラリ

【matplotlib】グラフをExcelに貼り付ける方法【openpyxl】

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


path_fig = r'test\test.png'
path_excel = r'test\test.xlsx'


# -------------------- グラフを作成 ------------------- #
data_x = [1,2,3,4,5]
data_y = [x*x for x in data_x]

fig, ax = plt.subplots(figsize = (5,5), facecolor='lightblue')

ax.plot(data_x, data_y, linestyle='solid', marker='o')

ax.set_xlabel('x')
ax.set_ylabel('y')

plt.show()
fig.savefig(path_fig)



# --- 既存のExcelファイルを開き、グラフを貼り付け --- #
wb = openpyxl.load_workbook(path_excel)
sh = wb.create_sheet('graph')

img = openpyxl.drawing.image.Image(path_fig)
sh.add_image(img, 'B2')

wb.save(path_excel)
wb.close()

コードを実行すると、下図のようにExcelにグラフが貼り付けられます。

matplotlibで作成したグラフをEsxcelに貼り付け
コードの実行結果:グラフがExcelに貼り付けられている。

前半部では、matplotlibでグラフを作成し、savefigメソッドで図として保存しています。

後半部分で、openpyxlを用いて、グラフをExcelに貼り付けています。

> wb = openpyxl.load_workbook(path_excel)
> sh = wb.create_sheet('graph')

既存のExcelファイルを開き、新しいsheetを作成しています。

> img = openpyxl.drawing.image.Image(path_fig)
> 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


path_excel = r'test\test.xlsx'


# -------------------- グラフを作成 ------------------- #
data_x = [1,2,3,4,5]
data_y = [x*x for x in data_x]

fig, ax = plt.subplots(figsize = (5,5), facecolor='lightblue')

ax.plot(data_x, data_y, linestyle='solid', marker='o')

ax.set_xlabel('x')
ax.set_ylabel('y')

plt.show()



# --- 既存のExcelファイルを開き、グラフを貼り付け --- #
wb = openpyxl.load_workbook(path_excel)
sh = wb.create_sheet('graph')

img_data = io.BytesIO()
fig.savefig(img_data, format='png')

img = openpyxl.drawing.image.Image(img_data)
sh.add_image(img, 'B2')

wb.save(path_excel)
wb.close()

コードの実行結果は、前述のサンプルコードと同じになります。

先ほどのコードとの違いは、1箇所だけです。

先ほどは、グラフを画像として保存してしましたが、こちらのコードでは、PCのメモリにグラフを保存しています。

> img_data = io.BytesIO()
> fig.savefig(img_data, format='png')

ioモジュールは、pythonの標準モジュールです。
BytesIOを用いることで、メモリ上でバイナリデータを扱うことができます。

savefigメソッドで、グラフをメモリに保存しています。

ioモジュールについてもっと詳しく知りたい方は、pythonの公式ドキュメントを参照してみてください。

スポンサーリンク

-matplotlib, ライブラリ
-,