在不同页面的R图形窗口中组合基本图形和ggplot图形

在不同页面的R图形窗口中组合基本图形和ggplot图形,r,pdf,plot,ggplot2,R,Pdf,Plot,Ggplot2,我曾经将R图和ggplot结合起来,然后在循环中使用它将其中的一部分打印到不同页面的pdf中。但由于某些原因,每一页的页边都会变得更大,在某些时候,绘图就会消失。我该怎么纠正呢?谢谢 我可以重现这个错误。在解决方案中,向vieport树添加(推送视口)一个视口,以插入网格图。但它忘记删除它(弹出视口) 在ned处添加行将解决此问题: popViewport() 测试解决方案: 为了测试这个修复程序,我将绘图代码包装在一个函数中,并对其进行复制以生成一个多页pdf 初始变量 效果很好。非常感谢。

我曾经将R图和ggplot结合起来,然后在循环中使用它将其中的一部分打印到不同页面的pdf中。但由于某些原因,每一页的页边都会变得更大,在某些时候,绘图就会消失。我该怎么纠正呢?谢谢

我可以重现这个错误。在解决方案中,向vieport树添加(推送视口)一个
视口
,以插入网格图。但它忘记删除它(弹出视口)

在ned处添加行将解决此问题:

popViewport()
测试解决方案: 为了测试这个修复程序,我将绘图代码包装在一个函数中,并对其进行复制以生成一个多页pdf

初始变量
效果很好。非常感谢。
library(gridBase)
library(biwavelet)
library(grid)
library(ggplot2)
t <- c(1:(24*14)) 
P <- 24 
A <- 10 
y <- A*sin(2*pi*t/P)+20

t1 <- cbind(t, y)
wt.t1=wt(t1)
combine_base_grid <-
  function(){

    par(mfrow=c(2, 2))
    plot(y,type = "l",xlab = "Time (hours)",ylab = "Amplitude",main = "Time series")
    plot(wt.t1, plot.cb=FALSE, plot.phase=FALSE,main = "Continuous wavelet transform",
         ylab = "Period (hours)",xlab = "Time (hours)")
    spectrum(y,method = "ar",main = "Spectral density function", 
             xlab = "Frequency (cycles per hour)",ylab = "Spectrum")
    ## the last one is the current plot
    plot.new()              ## suggested by @Josh
    vps <- baseViewports()
    pushViewport(vps$figure) ##   I am in the space of the autocorrelation plot
    vp1 <-plotViewport(c(1.8,1,0,1)) ## create new vp with margins, you play with this values 
    acz <- acf(y, plot=F)
    acd <- data.frame(lag=acz$lag, acf=acz$acf)
    p <- ggplot(acd, aes(lag, acf)) + geom_area(fill="grey") +
      geom_hline(yintercept=c(0.05, -0.05), linetype="dashed") +
      theme_bw()+labs(title= "Autocorrelation\n")+
      ## some setting in the title to get something near to the other plots
      theme(plot.title = element_text(size = rel(1.4),face ='bold'))
    print(p,vp = vp1) 
    popViewport()           ## THE FIX IS JUST THIS LINE
  }
pdf("plots.pdf")
replicate(3,combine_base_grid())
dev.off()