Как повернуть только одну ось Y в xyplot объекта зоопарка - PullRequest
4 голосов
/ 23 января 2012

У меня возникли проблемы с созданием xyplot объекта zoo.

Я создал упрощенный пример:

z <- zoo(cbind(a=1:4,b=11:14,c=10:13,d=5:8,e=10:7,f=1:4), 1991:1994)

Я использую следующий код для создания многопанельного xyplot:

numLbl <- 4
xx <- seq(from = min(time(z)), to = max(time(z)), length.out = numLbl)
xyplot(z[,c(1,2,4,6)],scales = list(x = list(at = time (z), rot = 90)), layout = c(1,4), aspect = "fill", xlab = "",
panel = function (x,y, ...) {
    panel.abline (v = xx, col = "grey", lty = 3)
    panel.xyplot(x, y, type = "b", col = 1)
})

То, что я хотел бы сделать, это перевернуть ось Y только на одной из этих панелей. Я нашел связанный пример:

http://r.789695.n4.nabble.com/lattice-limits-in-reversed-order-with-relation-quot-same-quot-td2399883.html

Однако я не могу заставить препанель работать с моим примером. Я совершенно новичок в решетке, и, возможно, что-то с функцией панели я не понимаю.

Кроме того, если есть простой способ получить одну из панелей в виде гистограмм, а другие в виде линий, я был бы очень признателен за советы.

Любая помощь очень ценится!

1 Ответ

1 голос
/ 26 марта 2012

Вот пример препанели, которая выполняет первую работу:

numLbl <- 4
count <- 0
swap <- 3
xx <- seq(from = min(time(z)), to = max(time(z)), length.out = numLbl)
xyplot(z[,c(1,2,4,6)],scales = list(x = list(at = time (z), rot = 90)),
    layout = c(1,4), aspect = "fill", xlab = "",
panel = function (x,y, ...) {
    panel.abline (v = xx, col = "grey", lty = 3)
    panel.xyplot(x, y, type = "b", col = 1)
},
prepanel = function (x,y, ...) {
    count <<- count + 1

    lims <- list(xlim=c(min(x),max(x)), ylim=c(min(y),max(y)));

    if (swap == count) {
        lims[[2]] = rev(lims[[2]]);
    }
    lims;
}
)
...