有没有办法在单个图下绘制2个或更多acfs

时间:2019-10-30 17:04:29

标签: r

我有一个时间序列数据帧。我有两个连续的变量,需要为其绘制自相关(acf)函数。我正在尝试使用plot_grid()来确保在一个窗口中显示两个图,但这并没有发生。这是示例:

#df is dataframe; col1 and col2 are continuous variables

p1 <- acf(df$col1,lag.max = 5 ,plot = TRUE) 
p2 <- acf(df$col2,lag.max = 5 ,plot = TRUE)
plot_grid(p1, p2, nrow = 2,ncol =1,rel_heights = c(2/1,2/1),rel_widths = c(2/2,2/2))
    f <- structure(list(Date = structure(c(1505779200, 1505779500, 1505779800, 
 1505780100), class = c("POSIXct", "POSIXt"), tzone = "UTC"), 
     A = c(212.429693925327, 211.464088210329, 211.653306685973, 
     210.981936189015), B= c(75.9448191760481, 76.2501222022257, 
     76.1316674891558, 76.8299563088116)), row.names = c(NA, 4L
 ), class = "data.frame")
p1 <- acf(f$A, lag.max = 5, plot = FALSE) 
p2 <- acf(f$B, lag.max = 5, plot = FALSE)

cowplot::plot_grid(autoplot(p1), autoplot(p2), nrow = 2)

3 个答案:

答案 0 :(得分:1)

plot_grid来自cowplot包(我认为),并且可用于基于网格的图形对象(即ggplot2 / lattice的输出)。 acf()使用基本图形。使用par(mfrow ...)的东西应该可以正常工作,例如:

orig_pars <- par(mfrow=c(1,2))
acf(df$col1,lag.max = 5 ,plot = TRUE) 
acf(df$col2,lag.max = 5 ,plot = TRUE)
pars(orig_pars) ## reset

或者您可以

  • 到处寻找基于网格的ACF绘图解决方案:某人可能已经写过ggacf或同等语言的
  • acf()对象中提取数据,并使用点阵/ ggplot创建自己的图

答案 1 :(得分:0)

基于网格的解决方案可能是

Python

enter image description here

如果要在图中添加标题或标签,可以执行以下操作:

library(ggfortify)

p1 <- acf(my_df$A, lag.max = 5, plot = FALSE)
p2 <- acf(my_df$B, lag.max = 5, plot = FALSE)

cowplot::plot_grid(autoplot(p1), autoplot(p2), nrow = 2)

数据

cowplot::plot_grid(autoplot(p1) + ggtitle("A"), autoplot(p2) + ggtitle("B"), nrow = 2)

# "AUTO" adds captial letters A, B, ... to the plots, but 
# you can also specify your own labels as a vector
cowplot::plot_grid(autoplot(p1), autoplot(p2), nrow = 2, labels = "AUTO") 

答案 2 :(得分:0)

如果您使用的是基数R,则可以使用以下代码

par(mfrow=c(1,2))
for(i in 2:ncol(f)) {
  y <- f[,i]
  name <- names(f)[i]
  plot(acf(y,plot=F, na.action = na.pass)[1:5],main=name)
}

enter image description here