Есть ли способ построить 2 или более ACF под одним сюжетом? - PullRequest
0 голосов
/ 30 октября 2019

У меня есть фрейм данных временного ряда. У меня есть две непрерывные переменные, для которых мне нужно построить функции автокорреляции (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 ]

1 голос
/ 30 октября 2019

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
0 голосов
/ 31 октября 2019

Если вы используете базу 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

0 голосов
/ 30 октября 2019

Решением на основе сетки может быть

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)

enter image description here

Если вы хотите добавить заголовки или метки к графику, вы можете сделать:

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") 

Данные

my_df <-
  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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...