如何将图形保存为磁盘上的图像?

bla*_*c05 297 plot r ggplot2 lattice r-faq

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

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

And*_*rie 369

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


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()
Run Code Online (Sandbox Code Playgroud)

这是在(组合的)帮助页面的图形格式描述的?png,?bmp,?jpeg?tiff,以及在单独的帮助页面?pdf.

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


请注意,如果您的绘图由任一个绘制,lattice或者ggplot2您必须明确打印绘图.请参阅此答案,更详细地解释了这一点,并链接到R FAQ:ggplot的qplot不执行采购


我正在看我的屏幕上的情节,我想把它原样复制到磁盘上.

dev.print(pdf, 'filename.pdf')
Run Code Online (Sandbox Code Playgroud)

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

  • 如果你没有设置路径,比如png(filename ="name.png"),你可以用`getwd()知道保存目录. (4认同)
  • 我已经扩展了这个答案,包括对`dev.print`的引用.我认为有两个密切相关的问题需要不同的答案.第二个子问题基本上是"我如何保存已经绘制到我的屏幕上的图像?".抱歉,如果我的编辑不是很好,请随意改进我的编辑. (2认同)
  • 如何用dpi = 3000保存图形 (2认同)
  • 使用 R 8 年而不知道我实际上可以将在我的屏幕上打开的开发文件保存在一个文件中。我想我不需要那个......但非常感谢:D (2认同)

Ita*_*mar 80

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

X11 ()
plot (x,y)

dev.copy(jpeg,filename="plot.jpg");
dev.off ();
Run Code Online (Sandbox Code Playgroud)

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

  • 我使用带有width和height参数的`dev.print()`来定义尺寸.例如`dev.copy(device = png,filename ='MyPlot.png',width = 1000,height = 500)dev.off()` (4认同)
  • `dev.print`更好,因为它准确地从屏幕复制图像.`dev.copy`默认强制每个图像都是正方形.如果你以交互方式很好地设置所有内容,那就太令人沮丧了 (3认同)
  • 很棒的答案!这允许您通过X试验图,直到您对结果满意为止,然后将它们保存在现场.这通常是最方便的操作模式. (2认同)

Pau*_*tra 67

如果使用ggplot2首选的保存方式就是使用ggsave.首先你需要绘制,在创建你打电话的情节后ggsave:

ggplot(...)
ggsave("plot.png")
Run Code Online (Sandbox Code Playgroud)

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


Owe*_*wen 29

像这样

png('filename.png')
# make plot
dev.off()
Run Code Online (Sandbox Code Playgroud)

或这个

# sometimes plots do better in vector graphics
svg('filename.svg')
# make plot
dev.off()
Run Code Online (Sandbox Code Playgroud)

或这个

pdf('filename.pdf')
# make plot
dev.off()
Run Code Online (Sandbox Code Playgroud)

也许还有其他人.它们都在帮助页面中列出.


Aar*_*aid 11

对于第一个问题,我发现dev.print在交互式工作时最好.首先,您可以直观地设置绘图,当您对所看到的内容感到满意时,可以要求R将当前绘图保存到磁盘

dev.print(pdf, file="filename.pdf");
Run Code Online (Sandbox Code Playgroud)

您可以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
Run Code Online (Sandbox Code Playgroud)


小智 8

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

  • 这也存在于Windows上的R GUI中,至少存在. (4认同)