Rを使って単純な線形回帰をプロットします。その画像をPNGまたはJPEGとして保存したいのですが、自動的に行うことはできますか? (コード経由)
2つの異なる質問があります。最初に、私はすでに自分のモニタ上のプロットを見ています、そしてそれをそのまま保存したいのです。次に、プロットをまだ生成していませんが、プロットコードを実行するときに直接ディスクに保存したいと思います。
2つの密接に関連した質問とそれぞれに対する答えがあります。
プロットを保存するには、以下の手順を実行する必要があります。
png()
、bmp()
、pdf()
などを使用してデバイスを開く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はソーシングで実行されません
dev.print(pdf, 'filename.pdf')
インタラクティブウィンドウに対して行ったサイズ変更を考慮して、これで画像が完全にコピーされます。この回答の最初の部分と同様に、pdf
をpng
などの他のファイルタイプに置き換えることができます。
Rでプロットを見続けたい場合は、dev.copy
を使うこともできます。
X11 ()
plot (x,y)
dev.copy(jpeg,filename="plot.jpg");
dev.off ();
R内のプロットウィンドウが多すぎる場合は、graphics.off()
を使用してすべてのプロットウィンドウを閉じます。
ggplot2
を使用する場合、推奨される保存方法はggsave
を使用することです。最初にプロットしなければなりません、プロットを作成した後、あなたはggsave
を呼び出します:
ggplot(...)
ggsave("plot.png")
画像の形式は、ファイル名に選択した拡張子によって決まります。追加のパラメータ、特にggsave
、width
、およびheight
にdpi
に渡すことができます。
このような
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()
そしておそらく他の人も。それらはすべてヘルプページにまとめられています。
最初の質問として、対話的に作業する場合はdev.print
が最善であると思います。まず、プロットを視覚的に設定し、見たものに満足したら、現在のプロットをディスクに保存するようにRに依頼することができます。
dev.print(pdf, file="filename.pdf");
pdf
をpng
などの他の形式に置き換えることができます。
これにより、画面に表示されているとおりに画像がコピーされます。 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
R Studioを使用している場合 http://rstudio.org/ 選択した解像度および解像度でプロットを保存するための特別なメニューがあります。
Andrie で示されるようにpng()
、bmp()
、pdf()
などを使用してデバイスを開くと、プロットのあるウィンドウはポップアップ表示されず、*。png、* bmpだけが開きます。または* .pdfファイルが作成されます。 Rは限られた数のグラフィックウィンドウしか扱えないため、これは大量の計算に便利です。
しかし、プロットを見て、それらを保存したい場合は、プロットが描かれ、それらを含むウィンドウがアクティブになった後にsavePlot(filename, type)
を呼び出してください。
plotpath<- file.path(path, "PLOT_name",paste("plot_",file,".png",sep=""))
png(filename=plotpath)
plot(x,y, main= file)
dev.off()
場合によっては、基本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)
呼び出しがグローバル環境で実行され、NULL
がbasesave()
に渡されます。
これらの答えに加えて、screen(ネイティブデバイス)へのプロットを生成する呼び出しを含むRスクリプトがあれば、これらはすべてpdfファイル(非対話型シェルのデフォルトデバイス)に保存することができます。 "Rplots.pdf msgstr "(デフォルトの名前)端末からスクリプトをRにリダイレクトすることで(あなたがLinuxかOS Xを実行していると仮定します)、例:
R < myscript.R --no-save
これは必要に応じてjpg/pngに変換できます
dev.copy(png,'path/pngFile.png')
plot(YData ~ XData, data = mydata)
dev.off()