15

正如这里gridBase所解释的,由于,即使两个图都使用 R 的基本图形系统,很容易将图嵌入到现有图中。但是,当将整个图保存为 pdf 时,第一页始终为空白。如何防止这种情况?

这是一个例子:

require(gridBase)

## generate dummy data
set.seed(1859)
x <- 1:100
y <- x + rnorm(100, sd=5)
ols <- lm(y ~ x)

pdf("test.pdf")

## draw the first plot
plot.new() # blank page also happens when using grid.newpage()
pushViewport(viewport())
plot(x, y)

## draw the second plot, embedded into the first one
pushViewport(viewport(x=.75,y=.35,width=.2,height=.2,just=c("center","center")))
par(plt=gridPLT(), new=TRUE)
hist(ols$residuals, main="", xlab="", ylab="")
popViewport(2)

dev.off()
4

2 回答 2

31

我认为这有点骇人听闻,但设置 onefile=FALSE 在我的机器上工作:

pdf("test.pdf", onefile=FALSE)

在寻找答案时(我并没有真正找到,而是在森林里偶然发现的)我遇到了 Paul Murrell 给 Rhelp 的这篇文章,他承认混合网格和基本图形甚至让大师感到困惑。

于 2012-09-18T19:04:32.433 回答
1

我发现的一个解决方案是在 for 循环中启动 pdf 文件;然后插入一个 if 子句来评估第一次迭代是否正在运行。当当前迭代是第一个迭代时,继续使用 pdf() 创建输出设备。在关闭 for 循环后放置 dev.off()。一个简单的例子如下:

for(i in 1:5){
  if (i == 1) pdf(file = "test.pdf")
  plot(rnorm(50, i, i), main = i)}
dev.off()
于 2018-04-27T13:08:46.357 回答