我用R绘制了一个简单的线性回归图。我想将该图像保存为PNG或JPEG格式。是否可以通过代码自动完成这个操作?
有两个不同的问题:首先,我已经在我的显示器上查看了这个图像,并且希望将其保存为原样。其次,我还没有生成这个图像,但是我希望在执行绘图代码时直接将其保存到磁盘上。
有两个不同的问题:首先,我已经在我的显示器上查看了这个图像,并且希望将其保存为原样。其次,我还没有生成这个图像,但是我希望在执行绘图代码时直接将其保存到磁盘上。
有两个密切相关的问题,每个问题都有一个答案。
要保存绘图,需要执行以下步骤:
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常见问题解答:ggplot's qplot does not execute on sourcing
dev.print(pdf, 'filename.pdf')
这应该可以完美地复制图像,尊重您对交互窗口所做的任何调整。您可以像答案的第一部分那样,将 pdf
替换为其他文件类型,例如 png
。
getwd()
来知道保存的目录。 - JuanPablodev.print
的引用。我认为有两个密切相关的问题需要不同的答案。第二个子问题基本上是“如何保存我已经绘制到屏幕上的图像?”如果我的编辑不太好,请随意改进我的编辑。 - Aaron McDaidm3=garchFit(~arma(3,0)+garch(1,1))
和plot(m3)
。 - jacob如果您想在R中继续查看图形,另一种选择是使用 dev.copy
:
X11 ()
plot (x,y)
dev.copy(jpeg,filename="plot.jpg");
dev.off ();
如果在 R 中出现太多的绘图窗口,可以使用 graphics.off()
关闭所有的绘图窗口。
dev.print
更好,因为它可以精确地从屏幕上复制图像。dev.copy
默认强制每个图像��是正方形的。如果你已经通过交互式方式设置好了所有内容,这会让人感到沮丧。 - Aaron McDaiddev.print()
函数,并使用宽度和高度参数来定义尺寸,例如:
dev.copy(device = png, filename = 'MyPlot.png', width = 1000, height = 500) dev.off()
。 - Scott如果您使用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
的问题是图像通常不同,并且不记住窗口大小和纵横比 - 它默认强制将绘图设为正方形。
对于第二个问题(正如其他人已经回答的),必须在执行绘图命令之前将输出定向到磁盘。
pdf('filename.pdf')
plot( yourdata )
points (some_more_data)
dev.off() # to complete the writing process and return output to your monitor
png()
、bmp()
、pdf()
等函数打开设备,如Andrie(最佳答案)所建议的那样,图形窗口将不会弹出,只会创建*.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 < myscript.R --no-save
这可以根据需要转换为jpg/png格式
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()
。