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

时间:2011-08-22 07:06:34

标签: r plot ggplot2 lattice r-faq

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

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

11 个答案:

答案 0 :(得分:354)

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


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的单独帮助页面的(组合)帮助页面对此进行了描述{1}}。

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


    请注意,如果您的情节是由latticeggplot2制作的,则必须明确打印情节。请参阅此答案,以更详细地解释此问题,并链接到R常见问题解答:ggplot's qplot does not execute on sourcing


    2。我目前正在查看我的屏幕上的情节,我想将其“原样”复制到磁盘上。

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

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

答案 1 :(得分:76)

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

X11 ()
plot (x,y)

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

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

答案 2 :(得分:60)

如果您使用ggplot2,首选的保存方式是使用ggsave。首先,您需要绘制,在创建绘图后,您调用ggsave

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

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

答案 3 :(得分:29)

喜欢这个

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 :(得分:11)

对于第一个问题,我发现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 :(得分:8)

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

答案 6 :(得分:2)

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

但是,如果您想要查看这些图并保存它们,请在绘制图表后调用savePlot(filename, type),并且包含它们的窗口处于活动状态。

答案 7 :(得分:2)

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

png(filename=plotpath)

plot(x,y, main= file)

dev.off()

答案 8 :(得分:0)

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

// Fields from build type: debug
public static final String API_VARIANT = ["debugvariant"|"releasevariant"];
// Fields from product flavor: [product1|product2]
public static final String URL_BASE = "https://[api1|api2]." + API_VARIANT + ".com";

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

答案 9 :(得分:0)

在某些情况下,人们希望同时保存并打印基础r图。我花了一点时间想出了这个效用函数:

$client->setOptions(['forbid_reuse' => true, … ]);

请注意,必须使用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

答案 10 :(得分:0)

  tabHost.getTabWidget().getChildAt(0).setBackground(null);
  tabHost.getTabWidget().getChildAt(1).setBackground(null);
  ...