web-dev-qa-db-ja.com

プロットを画像としてディスクに保存する方法

Rを使って単純な線形回帰をプロットします。その画像をPNGまたはJPEGとして保存したいのですが、自動的に行うことはできますか? (コード経由)

2つの異なる質問があります。最初に、私はすでに自分のモニタ上のプロットを見ています、そしてそれをそのまま保存したいのです。次に、プロットをまだ生成していませんが、プロットコードを実行するときに直接ディスクに保存したいと思います。

278
blakc05

2つの密接に関連した質問とそれぞれに対する答えがあります。


1.スクリプトで将来イメージが生成されますが、それをディスクに保存するにはどうすればよいですか。

プロットを保存するには、以下の手順を実行する必要があります。

  1. png()bmp()pdf()などを使用してデバイスを開く
  2. モデルをプロットする
  3. dev.off()を使用してデバイスを閉じます

プロットをpngファイルに保存するためのいくつかのサンプルコード:

fit <- lm(some ~ model)

png(filename="your/file/location/name.png")
plot(fit)
dev.off()

これについては、?png?bmp?jpeg、および?tiffのグラフィカルフォーマットに関する(組み合わせた)ヘルプページと、?pdfに関する別のヘルプページで説明されています。

ただし、画面上のウィンドウのサイズを変更した場合など、画面上に直接プロットされたものと同じプロットでは、ディスク上でイメージが異なる場合があります。


プロットがlatticeまたはggplot2のいずれかで作成されている場合は、プロットを明示的に印刷する必要があります。これをより詳細に説明し、またR FAQへのリンクもあるこの答えを見てください: ggplotのqplotはソーシングで実行されません


2.現在、画面上のプロットを見ていますが、それをそのままディスクにコピーしたいのです。

dev.print(pdf, 'filename.pdf')

インタラクティブウィンドウに対して行ったサイズ変更を考慮して、これで画像が完全にコピーされます。この回答の最初の部分と同様に、pdfpngなどの他のファイルタイプに置き換えることができます。

350
Andrie

Rでプロットを見続けたい場合は、dev.copyを使うこともできます。

X11 ()
plot (x,y)

dev.copy(jpeg,filename="plot.jpg");
dev.off ();

R内のプロットウィンドウが多すぎる場合は、graphics.off()を使用してすべてのプロットウィンドウを閉じます。

76
Itamar

ggplot2を使用する場合、推奨される保存方法はggsaveを使用することです。最初にプロットしなければなりません、プロットを作成した後、あなたはggsaveを呼び出します:

ggplot(...)
ggsave("plot.png")

画像の形式は、ファイル名に選択した拡張子によって決まります。追加のパラメータ、特にggsavewidth、およびheightdpiに渡すことができます。

59
Paul Hiemstra

このような

png('filename.png')
# make plot
dev.off()

またはこれ

# sometimes plots do better in vector graphics
svg('filename.svg')
# make plot
dev.off()

またはこれ

pdf('filename.pdf')
# make plot
dev.off()

そしておそらく他の人も。それらはすべてヘルプページにまとめられています。

29
Owen

最初の質問として、対話的に作業する場合はdev.printが最善であると思います。まず、プロットを視覚的に設定し、見たものに満足したら、現在のプロットをディスクに保存するようにRに依頼することができます。

dev.print(pdf, file="filename.pdf");

pdfpngなどの他の形式に置き換えることができます。

これにより、画面に表示されているとおりに画像がコピーされます。 dev.copyの問題点は、画像が異なることが多く、ウィンドウのサイズや縦横比を覚えていないことです。デフォルトではプロットは正方形になります。

2番目の質問は、(他の人がすでに答えているように)プロットコマンドを実行する前に出力をディスクに送る必要があります。

pdf('filename.pdf')
plot( yourdata )
points (some_more_data)
dev.off() # to complete the writing process and return output to your monitor
11
Aaron McDaid

R Studioを使用している場合 http://rstudio.org/ 選択した解像度および解像度でプロットを保存するための特別なメニューがあります。

8

Andrie で示されるようにpng()bmp()pdf()などを使用してデバイスを開くと、プロットのあるウィンドウはポップアップ表示されず、*。png、* bmpだけが開きます。または* .pdfファイルが作成されます。 Rは限られた数のグラフィックウィンドウしか扱えないため、これは大量の計算に便利です。

しかし、プロットを見て、それらを保存したい場合は、プロットが描かれ、それらを含むウィンドウがアクティブになった後にsavePlot(filename, type)を呼び出してください。

2
Alex Fainshtein
plotpath<- file.path(path, "PLOT_name",paste("plot_",file,".png",sep=""))

png(filename=plotpath)

plot(x,y, main= file)

dev.off()
2
Gijs

場合によっては、基本rプロットを保存して印刷したいことがあります。私は少し時間をかけて、この効用関数を思いつきました:

x = 1:10

basesave = function(expr, filename, print=T) {
  #extension
  exten = stringr::str_match(filename, "\\.(\\w+)$")[, 2]

  switch(exten,
         png = {
           png(filename)
           eval(expr, envir = parent.frame())
           dev.off()
         },
         {stop("filetype not recognized")})


  #print?
  if (print) eval(expr, envir = parent.frame())

  invisible(NULL)
}

#plots, but doesn't save
plot(x)

#saves, but doesn't plot
png("test.png")
plot(x)
dev.off()

#both
basesave(quote(plot(x)), "test.png")

#works with pipe too
quote(plot(x)) %>% basesave("test.png")

quoteを使用する必要があります。そうしないと、plot(x)呼び出しがグローバル環境で実行され、NULLbasesave()に渡されます。

0
Deleet

これらの答えに加えて、screen(ネイティブデバイス)へのプロットを生成する呼び出しを含むRスクリプトがあれば、これらはすべてpdfファイル(非対話型シェルのデフォルトデバイス)に保存することができます。 "Rplots.pdf msgstr "(デフォルトの名前)端末からスクリプトをRにリダイレクトすることで(あなたがLinuxかOS Xを実行していると仮定します)、例:

R < myscript.R --no-save

これは必要に応じてjpg/pngに変換できます

0
waferthin
dev.copy(png,'path/pngFile.png')
plot(YData ~ XData, data = mydata)
dev.off()
0
orientchen1978