【问题标题】:How do I prevent Rplots.pdf from being generated?如何防止生成 Rplots.pdf?
【发布时间】:2011-06-30 13:58:37
【问题描述】:

我正在使用一些 R 代码来生成许多图像为 png 文件;但是,在工作目录中不断生成一个Rplots.pdf 文件,有没有办法防止这种情况发生?

library(Cairo)
CairoPNG(file = "graphs.png")
nf <- layout(matrix(c(1:8), 2, 4, byrow=T), c(1, 1), c(1, 1, 1, 1), TRUE)
for (k in 1:num.k) {
    plotMatrix(connect.matrix.ordered[k,,], log = F, main = paste("k=", k.vector[k]), sub = paste("Cophenetic coef.=", rho[k]), ylab = "samples", xlab ="samples")
}
y.range <- c(1 - 2*(1 - min(rho)), 1)
plot(k.vector, rho, main ="Cophenetic Coefficient", xlim=c(k.init, k.final), ylim=y.range, xlab = "k", ylab="Cophenetic correlation", type = "n")
lines(k.vector, rho, type = "l", col = "black")
points(k.vector, rho, pch=22, type = "p", cex = 1.25, bg = "black", col = "black")
dev.off()

【问题讨论】:

  • 你的意思是Rplots.png??我看不出@Andrie 的回答将如何阻止创建 PDF 设备,但如果您的意思是 Rplots.png???
  • @Gavin Simpson - 关闭,现在有一个 Rplot001.png 文件正在生成但未清理。
  • 我无法重现您的问题(部分原因是您的示例不是独立的)。像下面这样更简单的东西也会产生流氓文件吗? library(Cairo); CairoPNG(file = "graphs.png"); layout(matrix(c(1:4), 2)); for (k in 1:4) plot(1,k); dev.off()
  • @Aaron - 我自己也不确定。该代码大部分没有记录,其中有很多与绘制图表相关,我们甚至不再需要。清理更多代码后,我可能不得不再次更新问题。
  • 听起来很有可能是有一些代码在没有先打开文件的情况下打开设备,就像我的回答一样。

标签: r cairo


【解决方案1】:

我知道这是一个非常古老的帖子,而且 OP 肯定已经解决了这个问题。但是我在使用 plotly 时遇到了类似的情况。将 ggplot 输出转换为 plotly 输出会产生类似的错误,即无法打开文件“Rplots.pdf”。

我通过简单地解决了它:

pdf(NULL)

我不确定错误的原因,无法弄清楚,但这条小线有助于消除错误并显示我的情节,正如我在情节和 ggplot 组合中所期望的那样。

【讨论】:

  • 很好的提示,@Syamanthaka。这困扰了我很长时间。但我发现,虽然pdf(NULL) 会在 R 以批处理模式运行时抑制 Rplots.pdf 的创建,但也会抑制 RStudio 中的 Plots 窗口显示,如果在显示任何绘图之前运行 pdf(NULL)。您可以通过在您可以批量或交互运行的程序顶部附近使用if(!interactive()) pdf(NULL) 来避免 RStudio 问题。
  • 根据base::options documentation,看起来环境变量 R_INTERACTIVE_DEVICE 和 R_DEFAULT_DEVICE 也可能用于解决此问题。
【解决方案2】:

我想知道在您给我们的代码 sn-p 之前或之后是否还有另一个命令可以打开设备。完成后运行dev.cur() 以查看是否有设备处于打开状态。如果不是,它应该返回空设备。

您可以通过以下方式重新获得Rplots.pdfRplot001.pnglayoutpar 命令会打开一个未打开的设备,并且由于没有给出文件名,因此它使用默认文件名。

options(device="pdf")
layout(1:4)
dev.off()

options(device="png")
par()
dev.off()

也许在这里看到这种情况会为您提供有关您的代码发生了什么的线索。

【讨论】:

  • 这最终成为了问题 - 生成的绘图没有打开文件。虽然代码中的位置非常模糊。
【解决方案3】:

这里是CairoPNG的源代码:

function (filename = "Rplot%03d.png", width = 480, height = 480, 
    pointsize = 12, bg = "white", res = NA, ...) 
{
    Cairo(width, height, type = "png", file = filename, pointsize = pointsize, 
        bg = bg, ...)
}

这告诉您CairoPNGfilename=... 作为参数,并将其作为file 参数传递给Cairo

我知道这会导致混乱,但关键是您对CairoPNG 的调用应该是:

CairoPNG(filename="graphs.png")

看看有没有用……

【讨论】:

  • 这对解决问题大有帮助,但看起来还需要options(device = "png") 才能让事情正常运行。
  • 做了更多的检查,当options(device = "png")Rplot001.png 文件上时,会生成Rplot001.png 文件,同样,如果它不在,则会生成Rplots.pdf。任何想法可能会发生什么? Rplot001.png 文件中确实包含来自汇总报告的有效数据。
  • 对不起,没有。我从未使用过Cairo。 :-(
【解决方案4】:

我最近在升级到 R-3.0.3 后遇到了类似的问题(是的,我们有点落后了!)。事实证明,palette("default") 现在打开了一个设备,虽然它以前不这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-31
    • 2020-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-23
    • 1970-01-01
    • 2019-10-13
    相关资源
    最近更新 更多