前回までの講座で、一通りmatplotlibを使って各種グラフを作成出来るようになったと思います。
そこで次にやりたくなるのが作成したグラフの保存ですね!
実際の現場では、作成したグラフを自分しか見ないという事はないでしょう。
誰かに見せるためにも画像は保存して、資料などに添付することが多いです。
そのため今回の講座では以下の点について解説します。
- 作成したグラフを保存する方法
- pdf・pngの違い
- 画像サイズの変更方法
どれも重要な内容のためしっかりと学んでいきましょう。
pngとpdfのどちらで保存するべきか?
matplotlibで画像を保存する際に、主に使われるのはpngかpdfだと思います。
ではこの2つの違いは何なのでしょうか?
それぞれのメリデメを簡単に解説します。
pngとは?
PNG(Portable Network Graphics)の主な特長としては以下の点があります。
- 保存や編集を繰り返しても画質の劣化が全くない
- 透明はもちろん半透明機能も使える
- 色や要素が少ないとファイルサイズを小さくしやすい
- Webに適している
pdfとは?
pdfの特長としては以下の点があります。
- pngほどではないが、画質は十分きれい
- 可逆圧縮を使用して画像を保存するため、ファイルサイズが小さくなる
- ビューワーが無いと見れない
- 印刷に適している
pngとpdfどちらを使うべき?
悩んだらpngで保存しておけば間違いないです。
私もほとんどpngでしか使いません。
印刷することもほほとんどありませんし、もししたとしても、A4くらいでしたら違いは分かりません。
私の環境では資料はweb上で作成することがほとんどなので、ほぼpngしか使っている人はいません。
ただ複数のグラフを作成し、一つのファイルで管理したいといった場合はpdfでのみ対応することができます。
グラフをpngで保存する
では実際にグラフをpngで保存する方法を見ていきましょう!
個人的にも簡単なので1番使う方法です。
savefig()関数で保存
まず画像で保存するにはsavefig関数を使います。
使い方としては下記のように使います。
- plt.savefig(‘ファイル名(path)’, dpi, bbox_inches, transparent)
引数としては、まずファイル名(path)の指定は必須ですので指定しましょう。
その他の引数の意味としては下記になります。
- dpi:オプションで画像の解像度を指定できます。
- bbox_inches:オプションで保存する領域を指定できます。
- transparent:オプションで背景を透明にすることができます。
では実際に保存してみましょう!
1000個のランダムな値を生成し、それをヒストグラムにした画像を保存しましょう。
1 2 3 4 5 6 7 |
# 1000個のランダムデータを作成 x = np.random.randn(1000) # ヒストグラムをplot plt.hist(x) # pngで保存 plt.savefig('sample_graph.png') |
上記のコードを実行する事で、作成したグラフをカレントディレクトリに保存する事ができます。
作業環境はgoogle coraboratoryですが、無事sample_graphファイルが作成されました。
中身を見てみると、

無事グラフが保存されていました。
この時大事なポイントとしてはファイル名の拡張子を必ず「png」とすることです。
‘sample_grapht.png’と記載したように、最後の部分をpngとすることでpng形式で保存ができます。
savefig()の引数について
つづいてsavefigに引数について詳細を見ていきましょう。
dpi
まずdpiです。これは保存する画像の解像度を指定できます。
デフォルト値は100ですので、もっと小さくても大丈夫という場合には小さくしましょう。
例えば10とする場合には下記のようにします。
1 2 3 4 5 6 |
# 1000個のランダムデータを作成 x = np.random.randn(1000) # ヒストグラムをplot plt.hist(x) plt.savefig('sample_graph.png', dpi=10) |
かなり小さくなりましたねw
まぁ基本的にはデフォルト値のままで大丈夫だと思いますので、そこまで使う機会は多くは無いと思います。
bbox_inches
bbox_inchesでは保存する領域を指定できます。
この引数には、以下の3つの値を指定できます。
- tight:グラフ描画領域の境界線に合わせた最小限の領域が保存されます。グラフ要素の余白が自動的に除去されます。
- none:Figure全体の領域が保存されます。グラフ要素と余白を含めたすべての領域が保存されます。
- 値を直接指定: (left, bottom, right, top)で直接指定もできます。インチ単位での指定となります。「bbox_inches=(0.2, 0.3, 0.8, 0.7)」のように指定します。
比較的使うのはtightですね!
余白を省いて画像をスッキリさせてくれます。
1 2 3 4 5 6 |
# 1000個のランダムデータを作成 x = np.random.randn(1000) # ヒストグラムをplot plt.hist(x) plt.savefig('sample_graph.png', bbox_inches='tight') |
少しですが、余白が無くなりスッキリしました!
transparent
transparentでは背景を透明にする事もできます。
資料上でグラフを重ねて表示(あるかは分かりませんが、、)する時に使えますねw
1 2 3 4 5 6 |
# 1000個のランダムデータを作成 x = np.random.randn(1000) # ヒストグラムをplot plt.hist(x) plt.savefig('sample_graph.png', transparent=True) |
グラフをpdfで保存する
続いてpdf形式でファイル保存する方法を見ていきましょう。
色々な方法がありますが、一番簡単な方法はplt.savefigのformat指定で設定することができます。
formatの指定方法
pdfの指定方法は非常に簡単です。
下記のように指定するだけです。
1 2 3 4 5 6 |
# 1000個のランダムデータを作成 x = np.random.randn(1000) # ヒストグラムをplot plt.hist(x) plt.savefig('sample_graph.pdf', format='pdf') |
format指定を’pdf’とし、ファイル名(path)の拡張子をpdfとするだけです。
これでサクッとpdf形式でファイル保存をする事ができます。
まとめ
いかがでしたでしょうか!
今回は以下の事を学びました。
- pngとpdfの違い
- savefig()でpng/pdfで保存する方法
- savefig()の主要な引数
基本的な使い方はシンプルなのですぐに覚えられると思いますし、引数については完璧に覚える必要はありません。
実際に使う際にググったりチートシートを見たり、自分のノートを見ながら書ければ問題ありません!
私も細かい点は覚えておらず、ほぼ過去のコードをコピーするかチートシートを見ながら書いています!
まずは拡張子にだけ気を配っていきましょうw
Work illustrations by Storyset