打印到由功能创建的绘图设备

时间:2013-11-13 23:41:36

标签: r pdf plot

我想打开并使用函数命名pdf绘图设备;在调用设备开启功能的级别绘制它;然后使用在该级别给出的dev.off()命令关闭它 - 这可能在R中吗?

背景

我从R打印到pdf,因此做了很多:

pdf(file.path(plotPATH, pdfName), width = Wwidth, height = Hheight)
plot( ...)
dev.off()

为了促进懒惰,我创建了一个打开绘图设备的功能并保存pdf(file.path(plotPATH ...))样板。

我创建的功能是:

pdfMk <- function(pdfName, Wwidth = 480, Hheight = 480) 
{ 
    pdf(file.path(plotPATH, pdfName), width = Wwidth, height = Hheight)
}

我想称之为:

pdfMk("foo.pdf")
plot(...)
dev.off()

问题是这不起作用......输出是pdf,具有适当的名称并位于适当的位置,但它始终为空白。

我以为我可能有关闭(或其他)的问题所以我尝试使用pdfMk逐步执行debug函数并在函数调用结束前创建绘图,但输出仍为空白pdf(两种情况都没有错误信息)。

这可能吗?如果是这样,我怎么能实现我的目标?

2 个答案:

答案 0 :(得分:2)

您的代码按预期工作,默认值除外。

来自?pdf

  

width,height:图形区域的宽度和高度,以英寸为单位。默认值为7。

您正在创建一个40 x 40英尺的文档。

答案 1 :(得分:1)

出于好奇:你为什么不在你的职能中包括密谋和dev.off()? 像

这样的东西
plotpath=file.path("C:","temp")

pdf_wrapper=function(plot_expression,pdfName,plotpath,Wwidth=7,Hheight=7) {
    pdf(file.path(plotpath,pdfName),width=Wwidth,height=Hheight)
    plot_expression
    dev.off()
    Sys.sleep(0.5)
}

pdf_wrapper(plot(c(1,2),c(1,2),type='l',col='blue',lty=2),"test.pdf",plotpath)

BTW:在这种情况下,我最后总是包含Sys.sleep(...)。如果随后调用pdf_wrapper,这将非常有用。我不知道这是由R还是RStudio引起的,但有时我在不包括等待时间时会得到损坏的pdf文件。它似乎确保有足够的时间来正确地转动设备。但是,我使用ggplot2graphics::plot这可能不是问题。