R言語でグラフやヒストグラムを作成した際、「画面に出すだけでなく、論文やプレゼン資料用に画像ファイルとして保存したい」と思ったことはありませんか?

通常、Rで作図コマンドを実行するとプロットウィンドウ(画面)に直接描画されるため、手動でスクリーンショットをとったりコピーしたりしがちです。しかし、標準関数の png() を使えば、完全に自動で指定した画像フォーマットとしてファイル保存できます。

この記事では、Rで描画したグラフをPNG画像として確実に書き出す基本手順から、画像サイズ・解像度の指定方法、初心者の方がハマりがちな「画像が正しく出力されない」トラブルの対処法まで分かりやすく解説します。


1. なぜ?Rのグラフ保存の基本メカニズム(アナロジー解説)

R言語でグラフをファイルに書き出す処理は、プログラミング初心者にとって少し独特な流れに見えるかもしれません。通常、多くのソフトウェアは「作成したグラフを後から保存」しますが、Rの標準機能(グラフィックデバイス)では「出力先の紙(デバイス)をあらかじめセットしてから描画する」という仕組みをとります。

分かりやすく例えるなら、「キャンバスの選択」と「額縁への格納」です。

  • png("ファイル名.png")(キャンバスの用意):
    「これからの絵は画面ではなく、透明なPNGのキャンバスに描くよ」と指示を出す作業です。この時点ではまだ何も描かれていません。
  • hist(...) などの描画コマンド(作図):
    用意したキャンバスに向かって実際にグラフを描き込みます。この時、画面には何も表示されず、バックグラウンドで画像データが作られます。
  • dev.off()(額縁を閉じて保存):
    「描き終わったのでペンを置き、キャンバスを保存して閉じる」という合図です。このコマンドを実行して初めて、PC内に完全なPNGファイルとして生成・出力されます。

この「png() で挟んで dev.off() で閉じる」という一連の流れさえ理解しておけば、後からの保存ミスや解像度の劣化を防ぐことができます。

2. 【実践】Rでヒストグラムを作成してPNG画像で出力する3ステップ

ここからは実際にRのコードを動かしながら、正規分布の乱数データを例にしてヒストグラムをPNGファイルとして書き出してみましょう。

STEP1:サンプルデータ(正規分布乱数)の準備

まずは、グラフ化するためのテストデータを生成します。ここでは rnorm(10) を使用して、標準正規分布に従う乱数を10個生成します。

# 正規分布に従う乱数を10個作成
num <- rnorm(10)

# 中身の確認
num
# [1] -0.06055043  0.12499954  1.14238382 -1.37079348 -1.21343242 -1.58449227
# [7]  0.91579040 -0.61212810 -1.10475624 -0.03152133

STEP2:画面表示で確認する基本の描画

通常通り画面上でヒストグラムを確認したい場合は、hist() 関数をそのまま実行します。(※ヒストグラムの基礎知識や詳細設定については、過去記事「ヒストグラムの基本的な作り方と見方」も参考にしてみてください。)

# 画面上にヒストグラムを描画
hist(num)
R言語で描画された標準的なヒストグラムの例

上記を実行すると、R Studioやグラフィックウィンドウに直接図が表示されます。

STEP3:`png()` と `dev.off()` でファイルに書き出す

いよいよ本題です。作成したヒストグラムを画面表示させず、直接 "histogram.png" というファイル名で書き出します。以下の3行を順番に実行してください。

# 1. 保存先ファイル名と形式を指定(書き出しデバイスを開く)
png("./histogram.png")

# 2. グラフを描画(ファイル内部に描き込まれる)
hist(num)

# 3. デバイスを閉じてファイルを保存完了させる
dev.off()

コードを実行すると、現在設定されている作業ディレクトリ(getwd() で確認可能)に "histogram.png" という画像ファイルが新しく自動生成されます。

3. 画像サイズや解像度(dpi)を調整する便利なオプション

標準の png() 設定では、画像サイズは「480×480ピクセル」で出力されます。Webサイト掲載用や論文・発表用など、用途に合わせて幅や高さ、解像度を変更したい場合は、以下のように引数を追加します。

# 横800px × 縦600px、解像度300dpiの高画質PNGとして書き出す例
png("./histogram_high_res.png", width = 800, height = 600, res = 300)
hist(num)
dev.off()

主に使用される指定オプションは以下の通りです。

引数(オプション) 説明 デフォルト値
width 画像の横幅を指定 480 (px)
height 画像の高さを指定 480 (px)
units サイズの単位("px", "in", "cm", "mm")を指定 "px"
res 解像度(dpi)を指定。印刷用なら300以上推奨 72 (dpi)

4. よくあるトラブル:「画像が保存されない・壊れる」の原因と対処法

Rでグラフィック出力を行う際、初心者が特によく直面するトラブルと対処法をまとめました。

トラブル1:0KBのファイルが作られて画像が開けない(またはファイルが生成されない)
原因: 最後に dev.off() を呼び出すのを忘れているか、スクリプトの実行途中でエラーが発生して処理が中断しています。
対処法: コンソールで何度か dev.off() を実行して一度デバイス状態をクリアにし、最初からスクリプトを再実行してください。

トラブル2:保存先がどこか分からない
原因: 相対パス(./histogram.png など)で指定した際、現在の作業ディレクトリを把握していないケースです。
対処法: getwd() を実行して作業フォルダを確認するか、png("C:/Users/username/Desktop/histogram.png") のように絶対パスで保存先を明示してください。

5. まとめ:正しく `dev.off()` を呼んでグラフ活用を効率化しよう

Rで作った美しい作図データをPNG画像として書き出す手順は非常にシンプルです。

  1. png("ファイル名.png") で保存用のデバイスを開く
  2. hist() や plot() などのコマンドでグラフを描画する
  3. dev.off() でデバイスを閉じて確定させる

この基本パターンを押さえておけば、大量のデータ処理から一括で画像出力・自動保存を行うプログラム(バッチ処理)を組むことも可能になります。解像度調整やサイズ調整も併せてマスターし、レポート作成やデータ分析作業の効率化に役立ててみてください!