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のグラフをPillow経由でリサイズ・回転・フォーマット変換したり、Webアプリケーションへ動的に画像を返したりといった応用も簡単に行えます。
-
Matplotlibで2Dヒストグラムをプロットする方法
Matplotlibで2Dヒストグラム(二次元ヒストグラム)を描画するには、hist2d()メソッドを使用します。2Dヒストグラムは、平面上のデータを格子状のビン(bin)に分割し、各ビンに含まれるデータ点の数に応じて色分けして可視化する手法です。以下の手順で作成できます。図のサイズを設定し、サブプロット間および周囲のパディング(余白)を調整します。numpyを使ってxおよびyのデータポイントを生成します。図(figure)とサブプロット(axes)のセットを作成します。hist2d()メソッドを使ってxとyをプロットします。プロットにタイトルを設定します。図を表示するには、show()メソッ
-
FlaskでMatplotlibのグラフを表示する方法【サンプルコード付き】
Webアプリケーション上でグラフを動的に表示したい場合、FlaskとMatplotlibを組み合わせるのが効果的です。この記事では、Flaskアプリケーション内でMatplotlibのプロットをPNG画像としてブラウザに返す方法を、具体的な手順とサンプルコードとともにわかりやすく解説します。 実装の流れ FlaskでMatplotlibのグラフを表示するまでの基本的な手順は以下の通りです。 小さなFlaskアプリケーションを作成する カレントディレクトリに移動し、環境変数を設定してアプリを起動する$ export FLASK_APP=file.py$ flask run ブラウザで http