Как настроить цвет и масштаб оси y на каждом множественном графике с помощью plot.zoo?

#r #time-series #panel #axis #zoo

#r #временные ряды #панель #ось #зоопарк

Вопрос:

Это воспроизводимый пример моих данных

 dat<-data.frame(
prec<-rnorm(650,mean=300),
temp<-rnorm(650,mean = 22),
pet<-rnorm(650,mean = 79),
bal<-rnorm(650,mean = 225))
colnames(dat)<-c("prec","temp","pet","bal")
    
dat<-ts(dat,start = c(1965,1),frequency = 12)
#splines
fit1<-smooth.spline(time(dat),dat[,1],df=25)
fit2<-smooth.spline(time(dat),dat[,2],df=25)
fit3<-smooth.spline(time(dat),dat[,3],df=25)
fit4<-smooth.spline(time(dat),dat[,4],df=25)
    
dat2 <- cbind(dat, fitted(fit1), fitted(fit2), fitted(fit3), fitted(fit4))
plot.zoo(window(dat2, start = 1965), xlab = "", screen = 1:4, 
col = c(1:4, 1, 2, 3, 4),yax.flip = TRUE, bty="n")
  

Как я могу изменить цвет и масштаб осей y на каждом графике, чтобы они соответствовали одному и тому же цвету временных рядов?

Ответ №1:

Создайте dat2 , который содержит как ряды, так и гладкие сплайны, используйте window , чтобы начать его с 1965, укажите, screen= чтобы столбцы были в панелях 1: 4 (он будет повторно использоваться для последних 4 столбцов) и укажите, что последние 4 столбца должны быть черными, т.Е. 1, Или измените цвета по своему усмотрению.

 dat2 <- cbind(dat, fitted(fit1), fitted(fit2), fitted(fit3), fitted(fit4))
plot.zoo(window(dat2, start = 1965), xlab = "", screen = 1:4, 
  col = c(1:4, 1, 1, 1, 1))
  

скриншот

Что касается комментария, мне кажется, его легче читать, если метки, метки и оси черные, но если вы все равно хотите это сделать, используйте mfrow= графический параметр с for циклом и укажите col.axis and col.lab в plot.zoo вызове:

 nc <- ncol(dat)
cols <- 1:nc  # specify desired colors
opar <- par(mfrow = c(nc, 1), oma = c(6, 0, 5, 0), mar = c(0, 5.1, 0, 2.1))
for(i in 1:nc) {
  dat1965 <- window(dat[, i], start = 1965)
  plot(as.zoo(dat1965), col = cols[i], ylab = colnames(dat)[i], col.axis = cols[i],
    col.lab = cols[i])
  fit <- smooth.spline(time(dat1965), dat1965, df = 25)
  lines(cbind(dat1965, fitted(fit))[, 2])  # coerce fitted() to ts
}
par(opar)
mtext("4 plots", line = -2, font = 2, outer = TRUE)
  

Комментарии:

1. Большое спасибо @ G. Гротендик. Последний вопрос. Знаете ли вы, как я могу изменить цвет оси ylab (метки, метки и значения) для каждой панели, чтобы они имели тот же цвет, что и соответствующие им временные ряды. например, data.temp, его значения 20,22,24 и yticks должны быть красными, чтобы соответствовать цвету временного ряда. До сих пор я пробовал col.axis=»red», но он меняется для всех панелей

2. См. Дополнение в конце.

3. Еще раз спасибо за ваш ответ. Но я хотел бы использовать plot.zoo, так как легче манипулировать графиком. Итак, не могли бы вы взглянуть на исправленный код (я отредактировал сообщение). Как в этом случае можно изменить цвет оси и масштаб оси y на каждом графике?

4. Я немного упростил код, но условные col.axis и col.lab не поддерживаются, и это не прямолинейно ни в одной из графических систем. Простой способ сделать это независимо от того, какую систему вы используете, — создать каждый график отдельно, а затем соединить их вместе, как мы это сделали. Предлагаю вам использовать предоставленный код или, если вы действительно хотите этого в plot.zoo, отправьте исправление для поддержки векторных col.axis и col.lab (поддерживаются скалярные col.axis и col.lab, и мы используем их в приведенном выше коде).

5. Теперь я понимаю, почему я не мог его изменить. Я приму ваши предложения и буду работать с предоставленным кодом. Большое спасибо за ваше время и помощь, вы сэкономили мне много времени. С уважением