Python
 Computer >> コンピューター >  >> プログラミング >> Python

Matplotlibの図をPIL画像オブジェクトに変換する方法

Matplotlibで作成した図(Figure)をPIL(Pillow)の画像オブジェクトに変換することで、画像の加工や他ライブラリとの連携が容易になります。ここでは、io.BytesIOを使ったメモリ内バッファを経由する変換手法を紹介します。

変換の手順

  • 図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。
  • 新しい図を作成するか、既存の図をアクティブにします。
  • plot()メソッドを使ってデータをプロットします。
  • メモリ内バッファ(BytesIO)を初期化します。
  • バッファに対して図を保存します。
  • PILのImageクラスでバッファから画像オブジェクトを取得します。
  • 現在の画像を表示します。
  • 使用後はメモリ内I/Oバッファを閉じてリソースを解放します。

コード例

import io
from PIL import Image
import matplotlib.pyplot as plt

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

plt.figure()
plt.plot([1, 2])

img_buf = io.BytesIO()
plt.savefig(img_buf, format='png')

im = Image.open(img_buf)
im.show(title="My Image")

img_buf.close()

処理のポイント

このコードでは、まずplt.rcParamsで図のサイズを7.50×3.50インチに設定し、figure.autolayoutを有効にすることで要素が重ならないよう自動調整しています。

次に、io.BytesIO()でメモリ上のバイナリストリームを作成し、plt.savefig()の保存先として指定します。ファイルシステムに一時ファイルを作成せずに済むため、高速かつクリーンな処理が可能です。

その後、Image.open(img_buf)でバッファ内のPNGデータを読み込み、PILの画像オブジェクトとして扱えるようになります。im.show()で画像を確認したら、最後にimg_buf.close()でバッファを明示的に閉じることを忘れないようにしましょう。

出力結果

Matplotlibの図をPIL画像オブジェクトに変換する方法Matplotlibの図をPIL画像オブジェクトに変換する方法

この手法を活用すれば、MatplotlibのグラフをPillow経由でリサイズ・回転・フォーマット変換したり、Webアプリケーションへ動的に画像を返したりといった応用も簡単に行えます。

  1. Matplotlibで2Dヒストグラムをプロットする方法

    Matplotlibで2Dヒストグラム(二次元ヒストグラム)を描画するには、hist2d()メソッドを使用します。2Dヒストグラムは、平面上のデータを格子状のビン(bin)に分割し、各ビンに含まれるデータ点の数に応じて色分けして可視化する手法です。以下の手順で作成できます。図のサイズを設定し、サブプロット間および周囲のパディング(余白)を調整します。numpyを使ってxおよびyのデータポイントを生成します。図(figure)とサブプロット(axes)のセットを作成します。hist2d()メソッドを使ってxとyをプロットします。プロットにタイトルを設定します。図を表示するには、show()メソッ

  2. FlaskでMatplotlibのグラフを表示する方法【サンプルコード付き】

    Webアプリケーション上でグラフを動的に表示したい場合、FlaskとMatplotlibを組み合わせるのが効果的です。この記事では、Flaskアプリケーション内でMatplotlibのプロットをPNG画像としてブラウザに返す方法を、具体的な手順とサンプルコードとともにわかりやすく解説します。 実装の流れ FlaskでMatplotlibのグラフを表示するまでの基本的な手順は以下の通りです。 小さなFlaskアプリケーションを作成する カレントディレクトリに移動し、環境変数を設定してアプリを起動する$ export FLASK_APP=file.py$ flask run ブラウザで http