【Python】グラフをPDFで出力する方法を紹介。PNG出力との違いは?

こんにちは!

Pythonでグラフを描くとき、通常は画像として出力しますよね。しかし、一度に出力するグラフの量が多くなってくると、以下のような不便な点が出てきます

  • 1枚1枚画像を開くのが手間だ
  • どの画像にどのグラフがあるかわかりづらい
  • 画像を探すのが大変

そんな悩みを解決する方法として、グラフをPDFファイルで出力する方法があるので、今回はその方法を紹介していきます^^

今回使用するデータ

今回も、Bostonの住宅データを使っていきます。

import pandas as pd
from sklearn.datasets import load_boston

data = load_boston()
df = pd.DataFrame(data.data, columns=data.feature_names)

PNGでグラフ画像を出力する

まずは、for文を使って描いた複数のグラフを、PNGで画像として出力してみます。

コードは以下の通り

import pandas as pd
from sklearn.datasets import load_boston
import matplotlib.pyplot as plt

#データの取得
data = load_boston()
df = pd.DataFrame(data.data, columns=data.feature_names)

#x軸の指定
x = df["CRIM"]

#dfの列の数だけfor文
for column in df.columns:

  #y軸の値
    y = df[column]

    #グラフ描画----------------------
    fig, axes = plt.subplots()
    axes.scatter(x,y)

    axes.set_title("CRIM-{}".format(column))
    axes.set_xlabel("CRIM")
    axes.set_ylabel(column)
    #--------------------------------


    #グラフを画像として保存
    fig.savefig("CRIM-"+ column +".png")

“CRIM”列を、X軸として固定しました。Y軸には、データフレームのすべての項目を入れ替えながら与えていきます。

プログラムを実行すると、指定のフォルダ(今回は、プログラムのファイルと同一階層)に画像が出力されます。

出力されましたが、これを1つずつ開いて閉じてとなると大変です。今回は13 枚のグラフで事足りましたが、X軸とY軸でそれぞれの組み合わせを… となると、100枚を超える場合も起きかねません。

そんな時に、1枚1枚画像が出力されてしまうと、地獄絵図です^^;

PDFファイルでグラフを出力する

そんな時に便利なのが、「PDFファイルとして画像を出力する方法」です。

先ほどと同じ13枚のグラフを、1つのPDFファイルとして出力します。

コードは以下の通り

import pandas as pd
from sklearn.datasets import load_boston
import matplotlib.pyplot as plt

#新たにインポート
from matplotlib.backends.backend_pdf import PdfPages

data = load_boston()
df = pd.DataFrame(data.data, columns=data.feature_names)

#PDFのインスタンスを作成
pdf = PdfPages("multiFigure.pdf")

x = df["CRIM"]

for column in df.columns:
    y = df[column]
    
    fig, axes = plt.subplots()
    axes.scatter(x,y)

    axes.set_title('CRIM-{}'.format(column))
    axes.set_xlabel('CRIM')
    axes.set_ylabel(column)

    #PDFファイルにグラフを追加していく
    pdf.savefig(fig)

#PDFファイルを閉じる
pdf.close()

PdfPages()を宣言した時点で、PDFファイルが作成されるようです。このとき、ファイル名の拡張子が.pdfになっていることを確認してください。

あとは、作成したグラフを、pdf.savefig()でPDFに追記していきます。ロジックとしては、PNGの場合と非常に似ています。

それでは、プログラムを実行して、ファイルが出力されたことを確認します。

PDFファイルが作成されています。

中を見てると、

しっかりと13枚分のグラフが入っています!

文字検索が可能

大量のグラフをPDFファイルにまとめる利点として、文字検索ができるという点があります。画像ファイルだと、グラフが多くなると、どのファイルにどの画像が入っているのかがわかりにくくなります。

PDFファイルにすると、グラフのタイトルや軸ラベルを検索(Ctrl + F)することができるので、目的のグラフをスマートに探し出すことができます。

もちろん、スマートに探し出すには、タイトル等の命名方法を工夫する必要があるかと思いますが..

Pythonでデータサイエンスするなら

Pythonでデータサイエンスをするなら、以下の書籍がおすすめです。Pandas、matplotlib、Numpy、scikit-learnといったデータサイエンスに必要なライブラリを、体系立てて一通り学ぶことができます。

ややお値段高めですが、これ1冊で十分という内容・ボリュームなので、損はしないと思います^^

まとめ

Pythonで作成したグラフをPDFファイルに出力する方法を紹介しました。

今回は1ページにつき1つのグラフでしたが、工夫次第で1ページに複数のグラフを描画することもできます。

グラフのPDF化は便利な手法なので、みなさん是非試してみてください^^

ではでは👋