Ten powtarzalny przykład moich danych

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

Jak mogę zmodyfikować kolor i skalę osi Y w każdej działce, aby pasowały do tego samego koloru serii czasu?

0
capuchin7 11 październik 2020, 00:23

1 odpowiedź

Najlepsza odpowiedź

Utwórz dat2, który zawiera zarówno serię, jak i płynne splajnie, użyj window, aby uruchomić go w 1965 r., Określ w screen=, że kolumny znajdują się w panelach 1: 4 (będzie recykling Ostatnie 4 kolumny) i określ, że ostatnie 4 kolumny będą czarne, tj. 1 lub modyfikować kolory, aby dopasować.

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

screenshot

Jeśli chodzi o komentarz, dla mnie wydaje mi się łatwiej być czytanie, jeśli kleszcze, etykiety i osie są czarne, ale jeśli chcesz to zrobić, użyj parametru graficznego mfrow= za pomocą pętli for i określić {{x2 }} i col.lab w wywołaniu 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)
2
G. Grothendieck 12 październik 2020, 11:46