2011-06-09 59 views
3

我有一个动物园的对象,看起来像这样:如何设置ylim的动物园对象的xyplot(格子)

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)

这给了我两个面板,但不同ylim相同的x轴。我希望他们有相同的ylim所以我想xyplot(z, ylim=range(z[,1]))它没有做任何事情,所以读“与格子情节动物园系列”后,我试图trellis.focus("panel", 2,1,ylim=range(z[,1]))还没有任何的运气...

这可能是一件容易的事情但是我发现格子包非常难以使用(至少从头开始)。谁能帮忙?

谢谢!

+0

请使用'dput(头(Z))',以提供示例性数据 – Marek 2011-06-09 16:33:02

+0

> dput(头(Z)):结构(C(6,11,3.6,8.4,8.9, 0,NA,NA,NA,NA,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”) – sbg 2011-06-09 16:47:08

+0

好的。我想我知道问题在哪里。你在数据和'范围'中有'NA'需要处理它,所以你需要做'range(z,na.rm = TRUE)'(见我编辑的答案)。 – Marek 2011-06-09 16:51:05

回答

3

尝试​​。

有两件事情:

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

It works

注释:R版本2.13.0,zoo_1.6-5,lattice_0.19-26

+0

谢谢!看起来我太过于复杂了:) – sbg 2011-06-09 16:56:36

2

xyplot.zoo接受最xyplot论争:

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

或这种变化:

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

您是否注意到我的解决方案将y-ticks放置在每个面板的左侧,并将左侧的第一个面板放置在右侧? – Marek 2011-06-10 07:58:00

+0

@Marek,我添加了一个变体,将它们全部放在左边。 – 2011-06-10 11:34:07

+0

格洛腾迪克尼斯。我喜欢格子中这种简单的语法。 – Marek 2011-06-10 12:54:42