Search code examples
rplotlayouttime-seriesxts

R code for plotting using layout() works when executed line by line but not when wrapped up in a function


I am using xts package.

library(xts)

The following works totally fine:

mydata = xts(rnorm(200), order.by = Sys.Date() - 1:200)
layout(matrix(c(1,1,2,3), 2, 2, byrow = TRUE),
         widths=c(1,1), heights=c(1,2))
plot(mydata, main = 'mydata Time Series')
acf(mydata, main = 'mydata acf', lag = 10)
pacf(mydata, main = 'mydata pacf', lag = 10)

good

But when I use the exact same thing as a function the plots are not shown well

mydata = xts(rnorm(200), order.by = Sys.Date() - 1:200)

return_plot <- function(mydata, lag = 10){
  layout(matrix(c(1,1,2,3), 2, 2, byrow = TRUE),
         widths=c(1,1), heights=c(1,2))
  plot(mydata, main = 'mydata Time Series')
  acf(mydata, main = 'mydata acf', lag = lag )
  pacf(mydata, main = 'mydata pacf', lag = lag)
}

return_plot(mydata)

bad

Any idea why this happens?


Solution

  • Use print(plot(mydata, main = 'mydata Time Series')) in your function.