matplotlib ライブラリ

【python】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

# -------------------- グラフを作成 ------------------- #
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で作成したグラフをEsxcelに貼り付け
コードの実行結果:グラフが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の公式ドキュメントを参照してみてください。

スポンサーリンク

スポンサーリンク

-matplotlib, ライブラリ
-,