如何将图像保存为磁盘上的图像?
我使用R绘制了一个简单的线性回归。我想将该图像保存为PNG或JPEG,是否可以自动执行? (通过代码)
有两个不同的问题:首先,我已经在看我的显示器上的情节,我想保存它。 其次,我还没有生成剧情,但我想直接保存到磁盘上,当我执行我的绘图代码。
有两个密切相关的问题,每个问题都有答案。
1.未来将在脚本中生成一个图像,如何将其保存到磁盘?
要保存情节,您需要执行以下操作:
- 打开一个设备,使用
png()
,bmp()
,pdf()
或类似的 - 绘制你的模型
- 使用
dev.off()
closures设备
一些用于将绘图保存为png
文件的示例代码:
fit <- lm(some ~ model) png(filename="your/file/location/name.png") plot(fit) dev.off()
这在graphics格式的(组合)帮助页面( ?png
, ?bmp
, ?jpeg
和?tiff
)以及单独的?pdf
帮助页面中进行了描述。
请注意,图像在磁盘上看起来可能与直接绘制到屏幕上的同一个绘图不同,例如,如果您调整了屏幕上的窗口大小。
请注意,如果你的图是由lattice
或ggplot2
制作的,你必须明确地打印图。 看到这个更详细解释这个答案,也链接到R常见问题: ggplot的qplot不执行采购
2.我正在看屏幕上的一个情节,我想把它“照原样”复制到磁盘上。
dev.print(pdf, 'filename.pdf')
这应该完全复制图像,尊重您对交互式窗口进行的任何调整。 您可以像在这个答案的第一部分中一样,用其他文件types(例如png
replacepdf
。
如果你想继续看R的情节,另一个select是使用dev.copy
:
X11 () plot (x,y) dev.copy(jpeg,filename="plot.jpg"); dev.off ();
如果在R中遇到太多的绘图窗口,可以使用graphics.off()
closures所有绘图窗口。
如果你使用ggplot2
,保存的首选方式是使用ggsave
。 首先,你必须在创build图表后创build一个名为ggsave
:
ggplot(...) ggsave("plot.png")
图像的格式取决于您为文件名select的扩展名。 其他参数可以传递给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");
您可以用其他格式,如png
取代pdf
。
这将完全按照您在屏幕上看到的方式复制图像。 dev.copy
的问题是,图像往往不同,不记得窗口的大小和宽高比 – 它强制默认情况下是平方的。
对于第二个问题(正如其他人已经回答的那样),在执行绘图命令之前,必须将输出定向到磁盘
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/ ,则有一个特殊的菜单可以将您绘制的任何格式保存为您喜欢的任何格式,并以您select的任何分辨率
如果你用Andrie (最好的答案)build议使用png()
, bmp()
, pdf()
等来打开设备,那么带有图的窗口不会popup,只有* .png,* bmp或* .pdf文件将被创build。 这在大量计算中是很方便的,因为R只能处理有限数量的graphics窗口。
但是,如果要查看绘图并将其保存,绘制绘图之后调用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脚本包含生成绘图到本地设备的调用,那么这些都可以保存到PDF文件(非交互式shell的默认设备)“Rplots.pdf “(默认名称),通过将脚本从terminalredirect到R(假设您正在运行Linux或OS X),例如:
R < myscript.R --no-save
这可以根据需要转换为jpg / png
在某些情况下,人们希望保存并打印一个基本的情节。 我花了一些时间,并提出了这个实用function:
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()
。
dev.copy(png,'path/pngFile.png') plot(YData ~ XData, data = mydata) dev.off()