【问题标题】:How to set ylim for a xyplot of a zoo object (lattice)如何为动物园对象(格)的 xyplot 设置 ylim
【发布时间】:2011-06-09 16:11:41
【问题描述】:

我有一个看起来像这样的动物园对象:

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

我尝试使用 lattice 在 2 个不同的面板中同时绘制两列:
xyplot(z)

这为两个面板提供了相同的 x 轴,但 ylim 不同。我希望他们拥有相同的 ylim,所以我尝试了 xyplot(z, ylim=range(z[,1])) 它没有做任何事情,所以在阅读了“Plot zoo Series with Lattice”之后,我尝试了 trellis.focus("panel", 2,1,ylim=range(z[,1])) 也没有任何运气......

这可能是一件容易的事,但我发现 lattice 包很难使用(至少开始时)。有人可以帮忙吗?

谢谢!

【问题讨论】:

  • 请使用dput(head(z))提供示例数据
  • > dput(head(z)):structure(c(6, 11, 3.6, 8.4, 8.9, 0, NA, NA, NA, NA, NA, NA), .Dim = c (6L, 2L), .Dimnames = list(NULL, c("2234", "2234.1")), index = 结构(c(-17746, -17745, -17744, -17743, -17742, -17741), class= "日期"), class= "动物园")
  • 好的。我想我知道问题出在哪里。你的数据中有NArange 需要处理它,所以你需要做range(z, na.rm=TRUE)(请参阅我编辑的答案)。
  • 我很高兴能帮上忙。供将来参考:您可以编辑您的问题,而不是在评论中添加内容。我帮你做(我稍微改变了数据,因为第二列都是NA)。

标签: r lattice zoo


【解决方案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

【讨论】:

  • 谢谢!看起来我过于复杂了:)
【解决方案2】:

xyplot.zoo 接受大多数 xyplot 参数,所以:

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

或这种变化:

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

【讨论】:

  • 您是否注意到我的解决方案将 y-ticks 放置在每个面板的左侧,而您在左侧的第一个面板,右侧的第二个?
  • @Marek,我添加了一个变体,将它们全部放在左侧。
  • 格洛腾迪克不错。我喜欢 lattice 中这种简单的语法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-14
  • 2012-01-23
  • 2014-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-23
相关资源
最近更新 更多