[matplotlib] 134. グラフの保存形式とdpiの設定

matplotlib

はじめに

matplotlibでグラフを保存する際には、savefig()メソッドを使用します。保存形式とdpi(dots per inch)設定は、出力品質と用途に大きく影響します。本記事では、PNG、PDF、SVG、EPS形式の特徴と、用途別の最適なdpi設定について解説します。また、ファイルサイズの最適化やベクター形式の活用、実践的なベストプラクティスまで、高品質なグラフ出力のためのガイドを提供します。

主な保存形式の比較

形式特徴用途推奨dpi
PNG可逆圧縮、透過対応Web表示、プレゼンテーション100-150
PDFベクター形式、拡大しても劣化なし論文、印刷物300以上
SVGベクター形式、編集可能Webグラフィック、デザイン編集
JPEG非可逆圧縮、ファイルサイズ小写真的なグラフ(非推奨)100-150
EPSベクター形式、LaTeX互換学術論文、出版300以上

基本的な保存方法

モジュールのインポート

バージョン

基本的な保存方法

dpi設定の最適化ガイドライン

用途別推奨dpi

  • 画面表示・Web用: 72-100 dpi
    • 画面解像度は通常72-96dpiのため、これ以上は不要
    • ファイルサイズを抑えられる
  • プレゼンテーション: 150 dpi
    • プロジェクター投影に十分な品質
  • 印刷物・論文: 300-600 dpi
    • 印刷品質を確保
    • 雑誌・ジャーナル投稿の標準
  • 高品質印刷: 600 dpi以上
    • ポスター、書籍など
    • ファイルサイズが大きくなる点に注意

最適化のための詳細設定

このコードは、matplotlibでPNG形式のグラフを保存する際に、高品質な出力を得るための詳細な設定を行っています:

各パラメータの説明

  • dpi=300: 解像度を300 dpiに設定。印刷物や論文に適した高品質な設定です
  • bbox_inches='tight': グラフの周りの余白を自動的に最小化し、必要な部分だけを含めます
  • pad_inches=0.1: bbox_inches='tight'使用時に、グラフの周りに0.1インチのパディング(余白)を追加します
  • facecolor='white': グラフの背景色を白に設定します
  • edgecolor='none': グラフの外枠の色を無しに設定します
  • transparent=False: 背景を不透明にします(透過させない)
  • format='png': 保存形式をPNGであることを明示的に指定します

この設定は、印刷物や論文など、高品質な出力が必要な場合に特に有用です。

ベクター形式の活用

論文や出版物には、PDFやSVGなどのベクター形式が推奨されます。拡大しても画質が劣化せず、テキストも編集可能です。

このコードは、matplotlibで作成したグラフを3つの異なるベクター形式で保存する方法を示しています:

  • plt.savefig('graph.pdf', format='pdf', bbox_inches='tight')
    • PDF形式で保存。論文や印刷物に最適で、拡大しても画質が劣化しません
    • format='pdf'で形式を明示的に指定
    • bbox_inches='tight'で余白を自動的に最小化
  • plt.savefig('graph.svg', format='svg', bbox_inches='tight')
    • SVG形式で保存。Webグラフィックやデザイン編集に適しており、編集可能なベクター形式です
    • Inkscape, Illustratorなどのグラフィックソフトでさらに編集可能
  • plt.savefig('graph.eps', format='eps', bbox_inches='tight')
    • EPS形式で保存。LaTeX互換で、学術論文や出版物に使用されます
    • 多くのジャーナルで受け入れられる形式

これらのベクター形式は、ラスター形式(PNGなど)と異なり、拡大しても画質が劣化しないという利点があります。用途に応じて適切な形式を選択できます。

ファイルサイズの最適化

PNG形式の最適化

このコードは、matplotlibでPNG形式のグラフを保存する際に、ファイルサイズを最適化するための設定を行っています:

  • dpi=150: 解像度を150 dpiに設定。プレゼンテーションや画面表示に適した品質
  • bbox_inches='tight': グラフの余白を自動的に最小化し、見栄えを改善
  • pil_kwargs={'optimize': True, 'quality': 95}: PIL(Python Imaging Library)のオプションを指定
    • optimize=True: PNG圧縮を最適化してファイルサイズを削減
    • quality=95: 画質を95%に設定(高品質を維持しつつファイルサイズを抑える)

この設定により、高品質を保ちながらもファイルサイズを効率的に抑えたPNGファイルが生成されます。

実践的なベストプラクティス

  • デフォルト設定の変更: plt.rcParams['savefig.dpi'] = 300で全体のデフォルトdpiを設定
  • 透過背景: プレゼンテーション用にはtransparent=Trueが便利
  • bbox_inches=’tight’: 余白を自動調整して見栄えを改善
  • 形式の選択: 編集可能性が必要ならSVG、印刷ならPDF、Webなら適切なdpiのPNG

設定の一括管理

# matplotlibrc設定ファイルでデフォルトを変更
import matplotlib as mpl

# プログラム内で設定
mpl.rcParams['savefig.dpi'] = 300
mpl.rcParams['savefig.format'] = 'pdf'
mpl.rcParams['savefig.bbox'] = 'tight'
mpl.rcParams['savefig.pad_inches'] = 0.1

matplotlibでグラフを保存する際のデフォルト設定を一括で変更することもできます。

基本構造

  • import matplotlib as mpl: matplotlibのコアモジュールをインポート
  • mpl.rcParams: matplotlibの設定パラメータを格納する辞書

各設定の詳細

  • mpl.rcParams['savefig.dpi'] = 300
    • すべてのsavefig()呼び出しでデフォルトの解像度を300 dpiに設定
    • 個別にdpiを指定しない場合、この値が使用されます
  • mpl.rcParams['savefig.format'] = 'pdf'
    • デフォルトの保存形式をPDFに設定
    • ファイル名に拡張子がない場合、この形式が使用されます
  • mpl.rcParams['savefig.bbox'] = 'tight'
    • デフォルトで余白を自動的に最小化
    • bbox_inches='tight'と同じ効果
  • mpl.rcParams['savefig.pad_inches'] = 0.1
    • グラフの周りに追加するパディング(余白)を0.1インチに設定
    • bbox='tight'と組み合わせて使用されます

利点

  • 複数のグラフを保存する際、毎回同じパラメータを指定する必要がなくなります
  • プロジェクト全体で一貫した品質の出力が得られます
  • コードの冗長性が減り、可読性が向上します

トラブルシューティング

  • Q: 保存したPNGがぼやけて見える
    • A: dpiを上げてください(300以上推奨)。また、bbox_inches='tight'を使用すると余白が調整され、より鮮明に見えます。
  • Q: PDF保存でフォントが埋め込まれない
    • A: plt.rcParams['pdf.fonttype'] = 42を設定すると、TrueTypeフォントとして埋め込まれます。

まとめ

グ本記事では、matplotlibでグラフを保存する際の形式選択とdpi設定について詳しく解説しました。適切な保存形式とdpi設定を行うことで、用途に応じた最適な品質のグラフを出力できます。

形式選択のポイント

EPS形式:学術論文や出版物に適しており、LaTeXとの互換性が高い形式です

PNG形式:Web表示やプレゼンテーションに最適。dpi 100-150で十分な品質が得られ、ファイルサイズも適度に抑えられます

PDF形式:論文や印刷物に最適。ベクター形式のため拡大しても画質が劣化せず、高品質な出力が可能です

SVG形式:編集可能性を重視する場合に最適。Illustratorなどのグラフィックソフトで後から編集できます

コメント