Python
のデータ可視化ライブラリといえば、Matplotlib
ですね。
Matplotlib
で作成した画像は様々なファイル形式で保存することができます。
しかし、実際に画像を保存しようとすると、次のような問題に直面することも…
- 画像として保存するにはどのメソッドを実行すればいいの?
- ファイルの種類を指定することはできる?
- 画像の見た目を調整してから保存したい!
この記事では、Matplotlib
の.savefig()
を使って画像を保存する方法について、分かりやすく解説していきます。
savefig()による画像の保存方法
Matplotlib
で作成したプロットを保存するには、plt.savefig()
を使用します。
次のようにファイル名と拡張子を指定します。
次のようにグラフを作成した後に、plt.savefig()
を実行しましょう。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-2,2)
y = x**2
plt.plot(x,y)
plt.savefig('sample.png')
下図のように作業フォルダに画像が保存されます。
保存形式や解像度など保存条件を変更する場合は、savefig()
の引数で指定することも可能です。
この記事では、plt.savefig()
の詳しい設定内容、保存時に役立つ設定について解説していきます。
plt.savefig()
の詳細設定を確認する前に、オブジェクト志向でプロットしている場合の画像保存方法についても解説しておきます。
figure
オブジェクトを生成している場合は、figure
のsavefig()
メソッドで保存することもできます。
figure.savefig('ファイル名.拡張子')
オブジェクト指向のプロットについての詳細は、次の記事を参考にしてください。
≫Matplotlib plt.subplots()の使い方|FigureとAxesを同時生成!
Matplotlibでグラフを描くとき「fig, ax = plt.subplots()って、よく見るけど何してるの?」「plt.subplots()の便利な使い方を知りたい! 」という方のために、plt.subplots()でFigureとAxesを作ると何が便利なのか、plt.subplots()の基本的な使い方、覚えておくと便利なplt.subplots()の引数を図解付きで解説します!plt.subplotsはオブジェクト指向のプロット作成の基本なので使い方をぜひ覚えましょう!
www.yutaka-note.com/entry/matplotlib_subplots
オブジェクト指向の場合の画像保存のサンプルコードを確認してみましょう。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-2,2)
y = x**2
fig, ax = plt.subplots()
ax.plot(x,y)
fig.savefig('sample.png')
plt.close(fig)
オブジェクト指向でグラフを描画する際は、スクリプト内で描画→保存を繰り返すことも多いです。
保存して不要になったプロットはplt.close(fig)
で閉じて、リソースを解放すると良いです。
fig.savefig()
の引き数はplt.savefig()
と共通なので、以下ではplt.savefig()
を例に詳細設定について解説していきます。
savefigメソッドの詳細設定
savefig()
では、次のような引数を取ることができます。
以下で各引数を使用した設定方法について詳しく解説していきます。
ファイル名の指定, fname
保存する画像のファイル名はfname
で指定します。fname
の引数名は省略可能です。
plt.savefig(fname='ファイル名')
or
plt.savefig('ファイル名')
Matplotlib
で対応している拡張子を指定すれば、指定した形式で出力してくれます。
対応している拡張子
Matplotlib
で対応している基本的な拡張子は以下の通りです。
ラスタ形式とベクタ形式を簡単にまとめると次の様な違いがあります。
拡大してみると、ラスタ形式は粗くなりますが、ベクタ形式は粗くなりません。
また、ファイル形式によって画像のサイズにも違いが出てきます。
上記の二次曲線のグラフを各形式で出力してみると、次のようなファイルサイズになります。
今回の場合は、TIFF形式のサイズが圧倒的に大きく、PDFのサイズが一番小さくなりました。
用途に応じて出力ファイルの形式を設定するようにしましょう。
解像度の設定, dpi
引数dpi
で画像の解像度を指定することができます。デフォルトは100
です。
plt.savefig('sample.png', dpi=300)
解像度を増やすと、画像がより高品質になりますが、ファイルサイズが大きくなります。
サンプルコードで実行例を確認してみましょう。
x = np.linspace(-2,2)
y = x**2
plt.plot(x,y)
plt.savefig('sample.png', dpi=300)
上記の例では、解像度に応じて次のように画像サイズが大きくなりました。
用途に応じて適切な値を設定しましょう。
また、解像度の設定が反映されるのは、ラスタ形式(jpg, png, tiff)のみです。
ベクタ形式では解像度を指定しても特に何も影響ありません。
余白の削除, bbox_inches
デフォルトでは、グラフの周りに若干の余白ができますが、引数でこの余白を最小限に縮めることができます。
余白を削除すると、画像がスッキリしてみえます、
サンプルファイルで実行例を確認してみましょう。
x = np.linspace(-2,2)
y = x**2
plt.plot(x,y)
plt.savefig("sample_normal.png")
plt.savefig("sample_tight.png", bbox_inches="tight")
2つの画像を比較してみましょう。
bbox_inches
は、figure
の特定の部分を切り出すために使用することもできますが、この使い方はほとんど使用しないと思います。
from matplotlib.transforms import Bbox
x = np.linspace(-2,2)
y = x**2
plt.figure(figsize=(5,5))
plt.plot(x,y)
plt.savefig("part_of_sample.png", bbox_inches=Bbox([[0, 0], [2.5, 2.5]]))
次のように画像の左下から2.5inchの領域だけが切り出されます。
余白サイズの設定
pad_inches
引数で、余白のサイズを調整することができます。
pad_inches
で余白を指定する場合は、bbox_inches="tight"
と併用する必要があります。
x = np.linspace(-2,2)
y = x**2
plt.plot(x,y)
plt.savefig("sample_tight.png", bbox_inches="tight")
plt.savefig('sample_padding.png',bbox_inches="tight", pad_inches=2)
この例では、グラフの周りに2インチの余白が設定されています。
余白が大きすぎると、グラフが小さく見にくくなってしまいます。
適切な余白の大きさを設定して、グラフを見やすくしましょう。
色を変更する方法
.savefig()
の引数設定で、保存時に背景色、枠線の色を変更することができます。
画像の保存時に設定できる色関連の引数は次の通りです。
facecolor
単独だとグラフ外に色がつき、transparent
と組み合わせると全体に色がつきます。
サンプルコードで挙動を確認してみましょう。
x = np.linspace(-2,2)
y = x**2
plt.plot(x,y)
plt.savefig("sample_facecolor.png", facecolor="lightgray")
plt.savefig("sample_transparent.png", transparent=True)
plt.savefig("sample_transparent_facecolor.png", transparent=True, facecolor="lightgray")
それぞれ下図のように背景色が設定されます。
グラフの外側の枠線の色はedgecolor
で指定します。
ただし、デフォルトでは枠線の太さが指定されていないので、枠線の太さも事前に指定しましょう。
plt.figure(linewidth=枠線の太さ)
plt.savefig("sample.png", edgecolor=色)
サンプルコードで挙動を確認してみましょう。
x = np.linspace(-2,2)
y = x**2
plt.figure(linewidth=5)
plt.plot(x,y)
plt.savefig("sample_edgecolor.png", transparent=True, edgecolor="red")
次のように枠線に色がつきます。
細い枠線だと、一部欠ける場合があるので注意しましょう。
その他の画像保存関連の設定
.savefig()
の引数とは異なりますが、画像保存に関連する設定として以下の内容を解説します。
- 画像サイズの変更
- 軸の範囲の変更
- 色の変更
- フォントの変更
画像サイズの変更
画像のサイズは、figure
オブジェクトのfigsize
を指定して変更します。
plt.figure(figsize=(width, height))
または
fig, axes = plt.subplots(figsize=(width, height))
plt
でプロットする場合は前者、オブジェクト指向の場合は後者を使用しましょう。
デフォルトのサイズは、(6.4 inch, 4.8 inch)です。
サンプルコードで挙動を確認してみましょう。
x = np.linspace(-2,2)
y = x**2
plt.figure(figsize=(5,5))
plt.plot(x,y)
plt.savefig("sample_rectangle.png")
次のような5inch×5inchの画像になります。
- 【参考】
plt.figure()
を使った設定については次の記事で詳しく解説しています。
≫Matplotlib plt.figure()を使う理由|FigureとAxesの関係を把握しよう
Matplotlibでグラフを描くとき「FigureとかAxesとかMatplotlib独特の単語が多くてよくわからない」、「Figureを作った後、結局どうやってプロットすればいいの?」という方のために、FigureとAxesの関係性を図解!FigureにAxesを追加する方法厳選3パターンを解説します!覚えておきたいFigureの設定・操作(サイズ変更、レイアウト調整など)も画像・サンプルコード付きで解説!
www.yutaka-note.com/entry/matplotlib_figure
フォントを変更する方法
Matplotlib
でフォントを変更する場合は、主に次の3つの方法があります。
fontname
を指定
rcParams
を設定
matplotlibrc
ファイルを書き換え
それぞれの方法のメリットデメリットは次の通りです。
具体的な方法は以下の記事で解説しています。
≫Matplotlib 日本語の表示方法|簡単にいろんな日本語フォントを使う方法
pythonのプロット作成ライブラリといえば、Matplotlibが有名ですが、デフォルト設定では日本語は表示できません。そこで、この記事では簡単な方法から様々な状況に対応できる方法まで、詳しく手順を解説していきます。①「Matplotlibで日本語を表示する方法」、②「すぐに使用できる日本語フォントのチェック方法」、③「任意の日本語フォントを追加して使用する方法」。これで日本語化で困ることもなくなると思います!
www.yutaka-note.com/entry/matplotlib_japanese
色を変更する方法
色の設定は個別のグラフの色の設定、カラーサイクルの設定があります。
個別の設定はcolor="色名"
などで指定することができます。次の記事で詳しく解説しています。
≫Matplotlib color 色の指定 | 一文字指定からカラーマップの使い方まで徹底解説
伝わるグラフを作るためのポイントはなんでしょうか?いかに視覚的にわかりやすいか、これが大切です。それには重要な要素に色をつけて、視覚的にうったえることが超大切!この記事では、matplotlibでの色の指定方法について、基本から応用まで徹底解説!
www.yutaka-note.com/entry/matplotlib_color
カラーサイクルは複数のグラフを描いた際に自動で設定される色のことです。次の記事で詳しく解説しています。
≫Matplotlib 日本語の表示方法|簡単にいろんな日本語フォントを使う方法
pythonのプロット作成ライブラリといえば、Matplotlibが有名ですが、デフォルト設定では日本語は表示できません。そこで、この記事では簡単な方法から様々な状況に対応できる方法まで、詳しく手順を解説していきます。①「Matplotlibで日本語を表示する方法」、②「すぐに使用できる日本語フォントのチェック方法」、③「任意の日本語フォントを追加して使用する方法」。これで日本語化で困ることもなくなると思います!
www.yutaka-note.com/entry/matplotlib_japanese
軸の範囲を設定する方法
軸の範囲はplt.xlim()
, plt.ylim()
で設定が可能です。
例えば、次のように設定します。
x = np.linspace(-10,10)
y = x**2
plt.xlim(-5,5)
plt.xlim(-20,20)
plt.plot(x,y)
plt.savefig("sample_xlim.png")
下図のように表示範囲が制限されます。
軸周りの詳しい設定については次の記事を参考にしてください。
≫Matplotlib 軸周り完璧マスターガイド | 軸・軸目盛・目盛り線の設定
Matplotlibで大変なのが軸周りの設定!グラフの「この要素」を変更するには、「どのメソッド」を使えばいいのかわからない…。という方のために、Matplotlibの軸・目盛り・目盛り線の設定について総まとめしました!これで軸周りの設定がだいぶ楽になります。軸周り完ぺきマスターガイド!
www.yutaka-note.com/entry/matplotlib_axis
オススメ|matplotlibとデータ分析の勉強方法
今回は、Matplotlib
の日本語化方法について、簡単な方法から様々な状況に対応できる方法まで解説しました。
Matplotlib
は奥の深いモジュールですが、なかなかわかりにくい部分もあります…。
そこで、グラフの作成方法、種類変更、凡例、タイトルの設定など網羅的にわかりやすく整理した記事を作りました。ぜひ参考にしてみてください。
≫【初心者向け】Matplotlibの特徴と使い方をわかりやすく解説!
脱初心者のためのMatplotlibマスターガイドです。そもそもどういう流れでプロットするのか?どんな種類のグラフが描けるのか?日本語設定は?タイトルや軸の設定は?オブジェクト指向って何?そんな疑問を解決します!この記事で、脱Matplotlib初心者を目指そう!
www.yutaka-note.com/entry/matplotlib_guid
また、データ分析初心者の方にはこちらの記事もおススメです。
私がこれまで勉強してきた経験をもとに考えたおススメの勉強本の紹介記事です。
何から始めて、どうやってレベルアップしていけばいいのか、初心者の方にぜひおススメしたい本を紹介しました。
≫独学でデータ分析を勉強するオススメ学習本
独学でのpythonデータ分析勉強に役立ったおススメ書籍を紹介していきます。業務でそれなりにデータ分析を行えるまで、いろいろな試行錯誤をしてきましたが、もし自分が今ゼロから勉強する立場ならどうするのがいいのか考えてみました。以下では、入門書、個別モジュール用、実践用の3つの視点でおススメ本を紹介していきます。
www.yutaka-note.com/entry/data_analysis