#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. Теперь я понимаю, почему я не мог его изменить. Я приму ваши предложения и буду работать с предоставленным кодом. Большое спасибо за ваше время и помощь, вы сэкономили мне много времени. С уважением