提问



我用R绘制一个简单的线性回归
我想将该图像保存为PNG或JPEG,是否可以自动执行? (通过代码)


有两个不同的问题:首先,我已经在我的显示器上查看情节了,我想保存原样。其次,我还没有生成情节,但是当我执行绘图代码时,我想直接将它保存到磁盘。

最佳参考


有两个密切相关的问题,每个问题都有答案。





1。将来我的脚本中会生成一个图像,如何将其保存到磁盘?



要保存绘图,您需要执行以下操作:



  1. 使用png()bmp()pdf()或类似的
  2. 打开设备
  3. 绘制模型

  4. 使用dev.off()
  5. 关闭设备


用于将绘图保存到png文件的一些示例代码:


fit <- lm(some ~ model)

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


这在图形格式?png?bmp?jpeg?tiff的[[组合]]帮助页面中以及?pdf的单独帮助页面中进行了描述。]]。


但请注意,磁盘上的图像可能与直接绘制到屏幕上的相同图表看起来不同,例如,如果您已调整屏幕窗口的大小。





请注意,如果您的绘图是由latticeggplot2制作的,则必须明确打印绘图。请参阅此答案,更详细地解释了这一点,并链接到R FAQ:ggplot的qplot不会在源上执行





2。我目前正在看我的屏幕上的情节,我想把它按原样复制到磁盘上。



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


这应该完美地复制图像,尊重您对交互式窗口所做的任何调整。您可以像在本答案的第一部分一样,将pdf替换为png等其他文件类型。

其它参考1


如果你想继续看R中的情节,另一种选择是使用dev.copy:


X11 ()
plot (x,y)

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


如果在R中出现太多绘图窗口的混乱,请使用graphics.off()关闭所有绘图窗口。

其它参考2


如果使用ggplot2,首选保存方法是使用ggsave。首先你必须绘制,在创建你打电话ggsave的情节后:


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


图像的格式由您为文件名选择的扩展名决定。其他参数可以传递给ggsave,特别是widthheightdpi

其它参考3


喜欢这个


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()


也许还有其他人。它们全部列在帮助页面中。

其它参考4


对于第一个问题,我发现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

其它参考5


如果您使用R Studio http://rstudio.org/,则会有一个特殊的菜单可以保存您喜欢的任何格式以及您选择的任何分辨率[50]

其它参考6


如果您按照 Andrie (最佳答案)的建议使用png()bmp()pdf()等打开设备,带有绘图的窗口不会弹出打开,只会创建* .png,* bmp或* .pdf文件。这在大规模计算中很方便,因为R只能处理有限数量的图形窗口。


但是,如果要查看绘图并保存它们,请在绘制绘图并调用包含它们的窗口后调用savePlot(filename, type)

其它参考7


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

png(filename=plotpath)

plot(x,y, main= file)

dev.off()

其它参考8


要添加这些答案,如果你有一个R脚本包含生成绘图的调用(本机设备),那么这些都可以保存到pdf文件(非交互式shell的默认设备)Rplots.pdf (默认名称)通过将脚本从终端重定向到R(假设您运行的是Linux或OS X),例如:


R < myscript.R --no-save


这可以根据需要转换为jpg/png

其它参考9


在某些情况下,人们想要保存并打印基础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()

其它参考10


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