Как установить ylim для xyplot объекта zoo (решетка)

#r #lattice #zoo

#r #решетка #зоопарк

Вопрос:

У меня есть объект zoo, который выглядит следующим образом:

 z <- structure(c(6, 11, 3.6, 8.4, 8.9, 0, NA, 0.5, 7, NA, 9, NA),
    .Dim = c(6L, 2L), .Dimnames = list(NULL, c("2234", "2234.1")), index = structure(c(-17746, -17745, -17744, -17743, -17742, -17741), class = "Date"),
    class = "zoo")
  

Я попытался использовать решетку для одновременного отображения обоих столбцов на 2 разных панелях:
xyplot(z)

Это дает мне одинаковую ось x для обеих панелей, но разный ylim. Я хочу, чтобы у них был одинаковый ylim, поэтому я попробовал, xyplot(z, ylim=range(z[,1])) это ничего не дало, поэтому после прочтения «Построить серию зоопарка с решеткой» я попробовал trellis.focus("panel", 2,1,ylim=range(z[,1])) также безуспешно…

Это, вероятно, легко сделать, но я нахожу пакет lattice очень сложным в использовании (по крайней мере, для начала). Кто-нибудь может помочь?

Спасибо!

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

1. пожалуйста, используйте dput(head(z)) для предоставления примеров данных

2. > dput(head(z)): структура(c(6, 11, 3.6, 8.4, 8.9, 0, NA, NA, NA, NA, NA, NA, NA), .Dim = c(6L, 2L), .Dimnames = list(NULL, c(«2234», «2234.1»)), индекс = структура (c(-17746, -17745, -17744, -17743, -17742, -17741), class = «Дата»), class = «зоопарк»)

3. ОК. Я думаю, я знаю, в чем проблема. У вас есть NA данные, и range вам нужно их обработать, что вам и нужно сделать range(z, na.rm=TRUE) (см. Мой отредактированный ответ).

4. Я рад, что помог. Для дальнейшего использования: вы могли бы отредактировать свой вопрос вместо добавления чего-либо в комментарии. Я делаю это за вас (я немного изменил данные, потому что во втором столбце было все NA ).

Ответ №1:

Попробуйте xyplot(z, ylim=range(z, na.rm=TRUE)) .

Есть две вещи:

  1. na.rm=TRUE заставить range работать должным образом
  2. range(z) вместо range(z[,1]) позволяет обрабатывать диапазон всех данных, а не только один столбец.

 require(lattice)
require(zoo)
z <- zoo(cbind(a=1:4,b=11:14), Sys.Date() (1:4)*10)
xyplot(z, ylim=range(z, na.rm=TRUE))
  

Это работает

Примечание: R версии 2.13.0, zoo_1.6-5, lattice_0.19-26

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

1. Спасибо! Похоже, я слишком усложнял 🙂

Ответ №2:

xyplot.zoo принимает большинство xyplot аргументов, поэтому:

 xyplot(z, scales = list(y = list(relation = "same")))
  

или этот вариант:

 xyplot(z, scales = list(y = list(relation = "same", alternating = FALSE)))
  

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

1. Вы заметили, что мое решение разместило y-галочки в левой части каждой панели, а ваше — на первой левой панели, на второй правой?

2. @Marek, я добавил вариант, который помещает их все слева.

3. Гротендик хороший. Мне нравится эта простота синтаксиса в решетке.