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

開いているすべてのMatplotlibの図を1つのPDFファイルにまとめて保存する方法

Matplotlibで複数の図(figure)を作成した際、「すべての図をまとめて1つのファイルに保存したい」というニーズはよくあります。この記事では、PdfPages を使って、現在開いているすべてのMatplotlibの図を一度に1つのPDFファイルへ保存する手順を解説します。

実装の手順

  • 図のサイズを設定し、autolayout でサブプロット間および周囲の余白を自動調整します。
  • figure() メソッドで新しい図 fig1 を作成(または既存の図をアクティブ化)します。
  • plot() メソッドで1本目の折れ線を描画します。
  • 再び figure() メソッドで新しい図 fig2 を作成します。
  • plot() メソッドで2本目の折れ線を描画します。
  • 保存先のPDFファイル名を格納する変数 filename を用意します。
  • ユーザー定義関数 save_multi_image を作成し、開いているすべての図を1つのファイルに保存できるようにします。関数内では PdfPages オブジェクト pp を新規生成します。
  • plt.get_fignums() で開いている図の番号一覧を取得します。
  • 取得した各図をループ処理で順番にファイルへ書き込みます。
  • 最後に図を画面表示したい場合は show() メソッドを使用します。

サンプルコード

from matplotlib import pyplot as plt
from matplotlib.backends.backend_pdf import PdfPages

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

fig1 = plt.figure()
plt.plot([2, 1, 7, 1, 2], color='red', lw=5)

fig2 = plt.figure()
plt.plot([3, 5, 1, 5, 3], color='green', lw=5)

def save_multi_image(filename):
    pp = PdfPages(filename)
    fig_nums = plt.get_fignums()
    figs = [plt.figure(n) for n in fig_nums]
    for fig in figs:
        fig.savefig(pp, format='pdf')
    pp.close()

filename = "multi.pdf"
save_multi_image(filename)

実行結果

このコードを実行すると、赤と緑の2つのグラフが、プロジェクトディレクトリ内のPDFファイル multi.pdf として保存されます。PDFの各ページに1つずつ図が配置されるため、レポートや資料への添付にもそのまま活用できます。

開いているすべてのMatplotlibの図を1つのPDFファイルにまとめて保存する方法開いているすべてのMatplotlibの図を1つのPDFファイルにまとめて保存する方法

ポイント解説

PdfPages はMatplotlibが標準で提供するマルチページPDF出力のためのクラスです。通常の savefig() は1回の呼び出しで1つの図しか保存できませんが、PdfPagesオブジェクトを savefig の出力先に指定することで、複数の図を同一ファイルの別ページとして追記できます。図の追加が終わったら必ず close() を呼び出してファイルを確定させる点に注意してください。また、plt.get_fignums() を使うことで、明示的に図の参照を保持していなくても、その時点で開いているすべての図を自動的に収集できるのがこの手法の利点です。

  1. Matplotlibでプロット上のグリッドサイズを定義する方法

    Matplotlib を使ってプロット上にグリッド(格子線)を表示し、その間隔(サイズ)を自由に定義する方法を紹介します。基本的な流れは以下の手順のとおりです。 グリッドサイズを定義する手順 figure() メソッドを使って、新しい図(Figure)を作成するか、既存の図をアクティブにします。 サブプロット配置の一部として、add_subplot() で図に Axes(座標軸)を追加します。 入力リストを渡して曲線をプロットします。 margins() メソッドで x 軸・y 軸のマージンを 0 に設定します。 X 軸のグリッド位置を指定するには、set_ticks() に目盛りの座標

  2. MatplotlibでiPythonノートブックの図をファイルとして保存する方法

    iPythonノートブック上で作成した図(グラフ)を画像ファイルとして保存したい場合、Matplotlibの機能を使えば簡単に実現できます。ここでは、基本的な手順とサンプルコードを紹介します。 図をファイルに保存する手順 iPythonから図をファイルとして保存するには、以下の手順を実行します。 plt.figure() で新しい図を作成するか、既存の図をアクティブにします。 add_axes() メソッドを使って、図に axes(座標軸)を追加します。 プロットしたいデータ(リストなど)を plot() で描画します。 savefig() メソッドを使って、図をファイルとして保存します。