STEP 11:保存とエクスポート

💾 STEP 11: 保存とエクスポート

作成したグラフを画像ファイルとして保存する方法をマスターしよう!

📋 このステップで学ぶこと

  • plt.savefig()の使い方
  • ファイル形式の選び方(PNG, SVG, PDF, JPG)
  • 解像度(dpi)の設定
  • 余白の調整
  • 透明背景の設定
  • 高品質な画像の保存方法

💾 1. 基本的な保存方法

なぜグラフを保存する必要があるのか

Matplotlibで作成したグラフは、そのままではプログラム実行中にしか見られません。レポートやプレゼン資料、Webサイトで使うためには、画像ファイルとして保存する必要があります。

Matplotlibにはplt.savefig()という便利な関数があり、これを使うことでグラフをPNG、SVG、PDFなど様々な形式で保存できます。

savefig()の基本構文

まず、最もシンプルな保存方法を見てみましょう。

【savefig()の基本構文】 plt.savefig(‘ファイル名.拡張子’) ・ファイル名:保存したいファイルの名前 ・拡張子:ファイル形式(.png, .svg, .pdf など) 【重要ルール】 plt.savefig() は必ず plt.show() の前に実行する!
⚠️ 最重要ポイント:savefig()はshow()の前に実行!

plt.show()を実行するとグラフがクリアされます。そのため、show()の後にsavefig()を実行すると、空白の画像が保存されてしまいます。必ず「グラフ作成 → savefig() → show()」の順序を守りましょう。

基本的な保存の例

実際にグラフを作成して保存してみましょう。コードの各部分が何をしているか、順番に説明します。

📝 コードの流れ
  1. ライブラリをインポート
  2. データを準備
  3. グラフを作成
  4. savefig()で保存(show()の前!)
  5. show()でグラフを表示
# ステップ1: ライブラリをインポート import matplotlib.pyplot as plt # ステップ2: データを準備 x = [1, 2, 3, 4, 5] y = [2, 4, 6, 8, 10] # ステップ3: グラフを作成 plt.figure(figsize=(10, 6)) # 図のサイズを設定 plt.plot(x, y, marker=’o’, linewidth=2.5, color=’steelblue’) plt.title(‘サンプルグラフ’, fontsize=16, fontweight=’bold’) plt.xlabel(‘X軸’, fontsize=12) plt.ylabel(‘Y軸’, fontsize=12) plt.grid(True, alpha=0.3) # ステップ4: 画像として保存(show()の前に実行!) plt.savefig(‘my_graph.png’) # ステップ5: グラフを表示 plt.show()
💡 各行の解説
コード 何をしているか なぜ必要か
plt.savefig('my_graph.png') グラフを「my_graph.png」という名前で保存 グラフを画像ファイルとして残すため
'my_graph.png' ファイル名と形式を指定 .pngでPNG形式を指定している

保存場所の指定方法

デフォルトでは、現在の作業フォルダにファイルが保存されます。別の場所に保存したい場合は、パス(場所)を指定します。

# 現在のフォルダに保存(ファイル名のみ指定) plt.savefig(‘graph.png’) # サブフォルダに保存(フォルダは事前に作成しておく) plt.savefig(‘images/graph.png’) # 絶対パスで保存(場所を完全指定) plt.savefig(‘/home/user/documents/graph.png’) # Google Colabの場合(Googleドライブにマウントしている場合) plt.savefig(‘/content/drive/MyDrive/graph.png’)
💡 パス指定のポイント
  • 相対パス:現在のフォルダからの相対位置(例:’images/graph.png’)
  • 絶対パス:ルートからの完全な位置(例:’/home/user/graph.png’)
  • フォルダの存在:指定したフォルダが存在しないとエラーになる
  • Google Colab:Driveをマウントしてから保存するとファイルが残る

📁 2. ファイル形式の選び方

なぜファイル形式が重要なのか

グラフを保存する際、ファイル形式によって画質、ファイルサイズ、用途の適性が大きく変わります。用途に合った形式を選ぶことが重要です。

Matplotlibは拡張子(.png, .svg など)を見て自動的に形式を判断します。つまり、ファイル名の末尾を変えるだけで、異なる形式で保存できます。

📊 ファイル形式の比較
形式 種類 特徴 最適な用途 推奨度
PNG ラスター 無圧縮、透明度対応、高品質 Web、プレゼン、レポート ⭐⭐⭐⭐⭐
SVG ベクター 拡大しても劣化なし、編集可能 印刷物、デザイン編集 ⭐⭐⭐⭐
PDF ベクター 文書に埋め込み可能、高品質 学術論文、公式レポート ⭐⭐⭐⭐
JPG ラスター 圧縮あり、透明度なし 写真向け(グラフには不向き) ⭐⭐
💡 ラスター形式とベクター形式の違い

ラスター形式(PNG, JPG):画像をピクセル(点)の集まりで表現。拡大すると粗くなる。

ベクター形式(SVG, PDF):画像を数式で表現。どれだけ拡大しても劣化しない。印刷物に最適。

各形式で保存する方法

拡張子を変えるだけで、異なる形式で保存できます。

# ライブラリとデータの準備 import matplotlib.pyplot as plt x = [1, 2, 3, 4, 5] y = [2, 4, 6, 8, 10] # グラフを作成 plt.figure(figsize=(10, 6)) plt.plot(x, y, marker=’o’, linewidth=2.5, color=’steelblue’) plt.title(‘サンプルグラフ’, fontsize=16, fontweight=’bold’) plt.grid(True, alpha=0.3) # PNG形式で保存(最も一般的、Web・プレゼンに最適) plt.savefig(‘graph.png’) # SVG形式で保存(ベクター形式、印刷物・編集向け) plt.savefig(‘graph.svg’) # PDF形式で保存(論文・公式文書向け) plt.savefig(‘graph.pdf’) # JPG形式で保存(非推奨:グラフには不向き) plt.savefig(‘graph.jpg’) plt.show()
💡 形式選択のガイドライン
用途 推奨形式 理由
Webサイト掲載 PNG 透明背景対応、ファイルサイズが適度
PowerPointプレゼン PNG 高品質で軽量、透明背景も使える
印刷物・ポスター SVG または PDF 拡大しても劣化しない
学術論文 PDF LaTeXとの相性が良い
Illustratorで編集 SVG ベクター形式で編集可能
迷ったら PNG ほとんどの場面で問題なく使える

🎨 3. 解像度(dpi)の設定

dpiとは何か

dpi(dots per inch)は、「1インチあたりに何個のドット(点)があるか」を表す数値です。数値が大きいほど高解像度(きめ細かい画像)になります。

dpiを適切に設定することで、用途に合った品質の画像を作成できます。高すぎるとファイルサイズが大きくなり、低すぎると画質が粗くなります。

【dpiのイメージ】 dpi = 72(低解像度) → 1インチに72個の点 → ファイルサイズ小、画質は粗い → 古いモニター表示向け dpi = 100(標準) → 1インチに100個の点 → ファイルサイズ中、画質は普通 → Web・プレゼン向け dpi = 300(高解像度) → 1インチに300個の点 → ファイルサイズ大、画質は細かい → 印刷物向け(推奨)

dpiを指定して保存する

savefig()のdpi引数で解像度を指定できます。

# ライブラリとデータの準備 import matplotlib.pyplot as plt x = [1, 2, 3, 4, 5] y = [2, 4, 6, 8, 10] # グラフを作成 plt.figure(figsize=(10, 6)) plt.plot(x, y, marker=’o’, linewidth=2.5, color=’steelblue’) plt.title(‘サンプルグラフ’, fontsize=16, fontweight=’bold’) plt.grid(True, alpha=0.3) # 低解像度で保存(Web表示用、ファイル軽量) plt.savefig(‘graph_low.png’, dpi=72) # 標準解像度で保存(デフォルト値に近い) plt.savefig(‘graph_normal.png’, dpi=100) # 高解像度で保存(印刷用、論文用) plt.savefig(‘graph_high.png’, dpi=300) # 超高解像度で保存(プロフェッショナル印刷用) plt.savefig(‘graph_ultra.png’, dpi=600) plt.show()
📐 dpiの選び方ガイド
dpi値 用途 ファイルサイズ目安 コメント
72-96 Web表示、モニター表示 約50-100KB 軽量だが印刷には不向き
100-150 PowerPoint、社内資料 約100-300KB バランスが良い
300 印刷物、論文、ポスター 約500KB-2MB 印刷の標準。迷ったらこれ
600以上 プロフェッショナル印刷 2MB以上 特殊用途向け
💡 dpi選択の実践的アドバイス
  • Web・プレゼン:dpi=100〜150(軽量で十分な品質)
  • 印刷物・論文:dpi=300(印刷業界の標準)
  • ポスター発表:dpi=300〜600(大きく印刷するため)
  • 迷ったら:dpi=300(万能で後悔しない)

✂️ 4. 余白の調整

なぜ余白を調整するのか

デフォルトではグラフの周囲に広めの余白があります。この余白が大きすぎると、グラフが小さく見えたり、スペースが無駄になったりします。

bbox_inches=’tight’を使うと、グラフに必要な部分だけを自動検出して、余白を最小限にできます。

bbox_inchesで余白を最小化

# ライブラリとデータの準備 import matplotlib.pyplot as plt x = [1, 2, 3, 4, 5] y = [2, 4, 6, 8, 10] # グラフを作成 plt.figure(figsize=(10, 6)) plt.plot(x, y, marker=’o’, linewidth=2.5, color=’steelblue’) plt.title(‘サンプルグラフ’, fontsize=16, fontweight=’bold’) plt.xlabel(‘X軸’, fontsize=12) plt.ylabel(‘Y軸’, fontsize=12) plt.grid(True, alpha=0.3) # 余白を最小化して保存 # bbox_inches=’tight’ で自動的に必要な範囲だけを保存 plt.savefig(‘graph_tight.png’, bbox_inches=’tight’, dpi=300) plt.show()
💡 bbox_inches=’tight’の効果
項目 デフォルト bbox_inches=’tight’使用時
余白 固定の広い余白 必要最小限に自動調整
凡例・ラベル 切れることがある 自動的に含まれる
ファイルサイズ やや大きい 最適化される

pad_inchesで余白を微調整

bbox_inches=’tight’だけだと余白がなさすぎる場合があります。pad_inchesで少しの余白を追加できます。

# ライブラリとデータの準備 import matplotlib.pyplot as plt x = [1, 2, 3, 4, 5] y = [2, 4, 6, 8, 10] # グラフを作成 plt.figure(figsize=(10, 6)) plt.plot(x, y, marker=’o’, linewidth=2.5, color=’steelblue’) plt.title(‘サンプルグラフ’, fontsize=16, fontweight=’bold’) plt.grid(True, alpha=0.3) # 余白を最小化しつつ、少しの余白を追加 # pad_inches=0.1 で0.1インチの余白を追加 plt.savefig(‘graph_padding.png’, bbox_inches=’tight’, # まず余白を最小化 pad_inches=0.1, # 0.1インチの余白を追加 dpi=300) plt.show()
💡 余白調整のコツ
  • 基本設定:bbox_inches=’tight’を常に使う
  • 少し余白が欲しい時:pad_inches=0.1〜0.2を追加
  • 凡例がはみ出る時:savefig()の前にplt.tight_layout()を実行
  • 推奨の組み合わせ:bbox_inches=’tight’, pad_inches=0.1

🎭 5. 透明背景の設定

透明背景が必要な場面

プレゼン資料やWebサイトでは、背景が透明なグラフが便利です。スライドの背景色が変わっても、グラフが自然に溶け込みます。

transparent=Trueを使うと、グラフの背景を透明にできます。

透明背景で保存する

# ライブラリとデータの準備 import matplotlib.pyplot as plt x = [1, 2, 3, 4, 5] y = [2, 4, 6, 8, 10] # グラフを作成 plt.figure(figsize=(10, 6)) plt.plot(x, y, marker=’o’, linewidth=2.5, color=’steelblue’) plt.title(‘サンプルグラフ’, fontsize=16, fontweight=’bold’) plt.xlabel(‘X軸’, fontsize=12) plt.ylabel(‘Y軸’, fontsize=12) plt.grid(True, alpha=0.3) # 背景を透明にして保存 # transparent=True で背景が透明になる plt.savefig(‘graph_transparent.png’, transparent=True, # 背景を透明に dpi=300, bbox_inches=’tight’) plt.show()
⚠️ 注意:JPG形式は透明度に対応していません

JPG形式は仕様上、透明度をサポートしていません。transparent=Trueを指定しても、背景は白になります。透明背景が必要な場合は必ずPNG形式を使いましょう。

背景色を指定して保存する

透明ではなく、特定の背景色を付けたい場合はfacecolorを使います。

# ライブラリとデータの準備 import matplotlib.pyplot as plt x = [1, 2, 3, 4, 5] y = [2, 4, 6, 8, 10] # fig, axオブジェクトで作成 fig, ax = plt.subplots(figsize=(10, 6)) # 図の背景色を設定 fig.patch.set_facecolor(‘#f0f0f0’) # 図全体の背景を薄いグレーに ax.set_facecolor(‘white’) # グラフエリアは白に # グラフを描画 ax.plot(x, y, marker=’o’, linewidth=2.5, color=’steelblue’) ax.set_title(‘背景色付きグラフ’, fontsize=16, fontweight=’bold’) ax.grid(True, alpha=0.3) # 背景色を保持して保存 # facecolor で保存時の背景色を指定 plt.savefig(‘graph_colored.png’, facecolor=fig.get_facecolor(), # 図の背景色を保持 dpi=300, bbox_inches=’tight’) plt.show()
💡 背景設定のまとめ
やりたいこと 設定方法 注意点
背景を透明に transparent=True PNG形式を使用すること
背景を白に facecolor=’white’ デフォルトで白の場合が多い
背景を任意の色に facecolor=’色コード’ 企業カラーなどを指定可能

🌟 6. 高品質な保存の完全版

プロ仕様の保存設定

これまで学んだ設定を組み合わせて、用途に応じた最適な保存設定を使いましょう。ここでは、プロフェッショナルな保存設定の完全版を紹介します。

# ライブラリをインポート import matplotlib.pyplot as plt # データを準備 months = [‘1月’, ‘2月’, ‘3月’, ‘4月’, ‘5月’, ‘6月’] sales = [100, 120, 150, 130, 160, 180] # 高品質なグラフを作成 fig, ax = plt.subplots(figsize=(12, 7)) ax.plot(months, sales, marker=’o’, linewidth=3, color=’steelblue’, markersize=10, label=’2024年売上’) ax.set_title(‘月別売上推移’, fontsize=18, fontweight=’bold’, pad=20) ax.set_xlabel(‘月’, fontsize=14, fontweight=’bold’) ax.set_ylabel(‘売上(万円)’, fontsize=14, fontweight=’bold’) ax.legend(loc=’best’, fontsize=12, frameon=True, shadow=True) ax.grid(True, linestyle=’–‘, alpha=0.4) # ========== 保存設定 ========== # 【印刷用】最高品質で保存 plt.savefig( ‘high_quality_graph.png’, dpi=300, # 高解像度 bbox_inches=’tight’, # 余白最小化 pad_inches=0.1, # 少しの余白を追加 facecolor=’white’, # 背景色を白に edgecolor=’none’, # 枠線なし format=’png’ # 形式を明示的に指定 ) # 【Web用】軽量版で保存 plt.savefig( ‘web_graph.png’, dpi=100, # 低めの解像度 bbox_inches=’tight’, pad_inches=0.1 ) # 【論文用】PDF形式で保存 plt.savefig( ‘graph.pdf’, bbox_inches=’tight’, pad_inches=0.1 ) plt.show()
💡 各引数の解説
引数 役割 推奨値
dpi 解像度(1インチあたりのドット数) Web: 100、印刷: 300
bbox_inches 保存範囲の指定 ‘tight’(余白最小化)
pad_inches 追加の余白(インチ単位) 0.1(少しの余白)
facecolor 背景色 ‘white’
transparent 背景を透明にするか プレゼン用: True
format ファイル形式を明示的に指定 ‘png’, ‘svg’, ‘pdf’など

用途別の推奨設定テンプレート

以下のテンプレートをコピーして使えば、用途に合った最適な設定で保存できます。

📋 コピーして使える推奨設定
# 【Web・プレゼン用】軽量で十分な品質 plt.savefig(‘graph.png’, dpi=100, bbox_inches=’tight’, pad_inches=0.1) # 【印刷・論文用】高品質 plt.savefig(‘graph.png’, dpi=300, bbox_inches=’tight’, pad_inches=0.1, facecolor=’white’) # 【プレゼン用】透明背景 plt.savefig(‘graph.png’, dpi=150, bbox_inches=’tight’, transparent=True) # 【デザイン編集用】ベクター形式 plt.savefig(‘graph.svg’, bbox_inches=’tight’) # 【論文用】PDF形式 plt.savefig(‘graph.pdf’, bbox_inches=’tight’, pad_inches=0.1)

🔧 7. 複数のグラフを保存

subplotsで作成した複数グラフの保存

複数のグラフ(subplots)を作成した場合も、同じ方法で1つの画像として保存できます。

# ライブラリとデータの準備 import matplotlib.pyplot as plt x = [1, 2, 3, 4, 5] y1 = [2, 4, 6, 8, 10] y2 = [1, 3, 5, 7, 9] # 1行2列のサブプロットを作成 fig, axes = plt.subplots(1, 2, figsize=(14, 6)) # 左のグラフ axes[0].plot(x, y1, marker=’o’, linewidth=2.5, color=’steelblue’) axes[0].set_title(‘グラフ1′, fontsize=14, fontweight=’bold’) axes[0].grid(True, alpha=0.3) # 右のグラフ axes[1].plot(x, y2, marker=’s’, linewidth=2.5, color=’coral’) axes[1].set_title(‘グラフ2′, fontsize=14, fontweight=’bold’) axes[1].grid(True, alpha=0.3) # 全体のタイトル plt.suptitle(‘複数グラフの保存例’, fontsize=18, fontweight=’bold’) # レイアウトを自動調整 plt.tight_layout() # 複数グラフを1つの画像として保存 plt.savefig(‘multiple_graphs.png’, dpi=300, bbox_inches=’tight’, pad_inches=0.2) plt.show()
💡 複数グラフ保存のポイント
  • tight_layout()を先に実行:グラフ同士の重なりを自動調整
  • pad_inchesを少し大きめに:0.2程度がバランス良い
  • suptitle()で全体タイトル:複数グラフに共通のタイトルを付けられる

📝 STEP 11 のまとめ

✅ このステップで学んだこと
トピック 重要ポイント
savefig()の基本 必ずshow()の前に実行する
ファイル形式 PNG(Web)、SVG/PDF(印刷)を使い分け
dpi(解像度) Web: 100、印刷: 300が目安
余白調整 bbox_inches=’tight’で最小化
透明背景 transparent=True(PNG形式のみ)
推奨設定 dpi=300, bbox_inches=’tight’, pad_inches=0.1
💡 最重要ポイント

グラフの保存はplt.show()の前に実行します。これを忘れると空白の画像が保存されてしまいます。

迷ったときはPNG形式、dpi=300、bbox_inches=’tight’の組み合わせを使えば、ほとんどの場面で問題ありません。次のステップでは、これまで学んだスキルを総動員して実践演習に取り組みます!

📝 実践演習

演習 1 基礎

折れ線グラフを作成し、PNG形式(dpi=100)で保存してください。

【解答コード】
import matplotlib.pyplot as plt # データを準備 x = [1, 2, 3, 4, 5] y = [2, 4, 6, 8, 10] # グラフを作成 plt.figure(figsize=(10, 6)) plt.plot(x, y, marker=’o’, linewidth=2.5, color=’steelblue’) plt.title(‘サンプルグラフ’, fontsize=16, fontweight=’bold’) plt.xlabel(‘X軸’, fontsize=12) plt.ylabel(‘Y軸’, fontsize=12) plt.grid(True, alpha=0.3) # PNG形式で保存(dpi=100) plt.savefig(‘my_graph.png’, dpi=100, bbox_inches=’tight’) plt.show()

ポイント:savefig()をshow()の前に記述していることを確認しましょう。bbox_inches=’tight’で余白も最小化しています。

演習 2 応用

同じグラフを3つの形式(PNG、SVG、PDF)で保存してください。PNGは高解像度(dpi=300)にしてください。

【解答コード】
import matplotlib.pyplot as plt # データを準備 months = [‘1月’, ‘2月’, ‘3月’, ‘4月’, ‘5月’] sales = [100, 120, 150, 130, 160] # グラフを作成 plt.figure(figsize=(10, 6)) plt.plot(months, sales, marker=’o’, linewidth=2.5, color=’steelblue’) plt.title(‘月別売上推移’, fontsize=16, fontweight=’bold’) plt.xlabel(‘月’, fontsize=12) plt.ylabel(‘売上(万円)’, fontsize=12) plt.grid(True, alpha=0.3) # PNG形式(高解像度 dpi=300) plt.savefig(‘graph.png’, dpi=300, bbox_inches=’tight’, pad_inches=0.1) # SVG形式(ベクター形式) plt.savefig(‘graph.svg’, bbox_inches=’tight’) # PDF形式(論文・印刷用) plt.savefig(‘graph.pdf’, bbox_inches=’tight’) plt.show()

ポイント:3つのsavefig()をすべてshow()の前に記述します。SVGとPDFはベクター形式なのでdpi指定は不要です。

演習 3 発展

背景を透明にしたグラフを作成し、高品質(dpi=300)で保存してください。

【解答コード】
import matplotlib.pyplot as plt # データを準備 months = [‘1月’, ‘2月’, ‘3月’, ‘4月’, ‘5月’, ‘6月’] sales = [100, 120, 150, 130, 160, 180] # グラフを作成 fig, ax = plt.subplots(figsize=(12, 7)) ax.plot(months, sales, marker=’o’, linewidth=3, color=’steelblue’, markersize=10, label=’2024年売上’) ax.set_title(‘月別売上推移’, fontsize=18, fontweight=’bold’, pad=20) ax.set_xlabel(‘月’, fontsize=14, fontweight=’bold’) ax.set_ylabel(‘売上(万円)’, fontsize=14, fontweight=’bold’) ax.legend(loc=’best’, fontsize=12, frameon=True, shadow=True) ax.grid(True, linestyle=’–‘, alpha=0.4) # 透明背景、高品質で保存 plt.savefig(‘transparent_graph.png’, transparent=True, # 背景を透明に dpi=300, # 高解像度 bbox_inches=’tight’, # 余白最小化 pad_inches=0.1) # 少しの余白を追加 plt.show()

ポイント:transparent=Trueを指定することで背景が透明になります。PNG形式を使用することを忘れずに(JPGは透明度非対応)。

❓ よくある質問

Q1: 保存したグラフが真っ白になります。なぜですか?
plt.show()の後にsavefig()を実行していませんか?show()を実行するとグラフがクリアされるため、その後にsavefig()を実行しても空白の画像しか保存されません。必ずsavefig()をshow()の前に記述してください。これが最も多いミスです。
Q2: Web用と印刷用でdpiをどう使い分けるべきですか?
Web用はdpi=100〜150、印刷用はdpi=300が基本です。Web表示ではファイルサイズを抑えつつ十分な品質を保てます。印刷物では300dpi以上が業界標準です。迷ったらdpi=300にしておけば、どちらの用途にも対応できます。
Q3: 凡例や軸ラベルが保存時に切れてしまいます。どうすればいいですか?
bbox_inches=’tight’を使いましょう。この設定で、グラフに必要な範囲を自動検出して保存します。それでも切れる場合は、savefig()の前にplt.tight_layout()を実行してください。また、pad_inches=0.1〜0.2を追加すると、少しの余白が確保されて見栄えが良くなります。
Q4: SVGとPDFはどう使い分けるべきですか?
編集が必要ならSVG、文書に埋め込むならPDFです。SVGはAdobe IllustratorやInkscapeで後から編集できます。PDFは論文やレポートに直接埋め込むのに最適です。どちらもベクター形式なので、拡大しても劣化しません。
Q5: Google Colabで保存したファイルはどこにありますか?
Colabの一時ストレージに保存されます。ただし、セッションが切れるとファイルは消えてしまいます。永続的に保存するには、Googleドライブをマウントして、’/content/drive/MyDrive/’以下に保存しましょう。左側のファイルパネルからダウンロードすることもできます。
📝

学習メモ

データ可視化マスター - Step 11

📋 過去のメモ一覧
#artnasekai #学習メモ
LINE