【发布时间】:2017-11-30 19:04:12
【问题描述】:
对于我的 cowplot 包中的各种函数,我需要能够通过 ggplotGrob() 函数将 ggplot2 图转换为 grobs。这种情况下的一个已知问题是ggplotGrob() 需要一个打开的图形设备,并且根据当前打开的图形设备,对该函数的调用会创建一个虚假的空图。有关此问题的示例,请参阅 ggplot2 issue #809 或最近的 cowplot issue #82。
可以通过打开一个空的 pdf 设备来解决这个问题。请参见以下示例:
library(ggplot2)
# make a plot
p <- qplot(1:10, 1:10)
pdf(NULL) # open NULL pdf device to absorb empty page
grob <- ggplotGrob(p) # convert plot
dev.off()
现在这是我的问题:序列 pdf(NULL); ggplotGrob(...); dev.off() 在 R 包中使用是否安全,或者是否存在我不能假设 pdf(NULL) 会成功/可能的情况?如果存在这种情况,我可以假设存在其他图形设备吗?当我处于pdf(NULL) 不是一个好主意的情况下,我可以测试吗?或者,让代码容忍pdf(NULL) 调用的潜在失败的最佳方法是什么?
更新:另请参阅 this SO post,其中讨论了空白页的问题,但没有详细说明可能有哪些安全方法可以解决该问题。
更新 2:This comment 指出某些 R 安装没有正常工作的pdf()。因此,似乎确实并不总是可以打开 pdf NULL 设备。那么问题是:我该如何解决这个问题?
【问题讨论】:
-
谢谢@baptiste!我假设您在
egg库中遇到了类似的问题。你做什么工作?使用pdf(NULL)并希望获得最好的结果? -
老实说,我已经放弃了这个问题,就像许多其他被关闭或解雇的人一样。这听起来像是一个合理的解决方法。