R 如何在晶格嵌板中添加多条垂直线?

R 如何在晶格嵌板中添加多条垂直线?,r,lattice,R,Lattice,以这个例子为例 library(lubridate) library(tibble) library(lattice) dat <- tibble(mydate = c(ymd('2018-02-01'), ymd('2018-02-02'), ymd('2018-02-03'), ymd('2018-02-04'), ymd('2018-02-

以这个例子为例

library(lubridate)
library(tibble)
library(lattice)

dat <- tibble(mydate = c(ymd('2018-02-01'),
                  ymd('2018-02-02'),
                  ymd('2018-02-03'),
                  ymd('2018-02-04'),
                  ymd('2018-02-05')),
       myx = c(1,2,3,4,5),
       myz = c(2,3,2,3,1))

# A tibble: 5 x 3
  mydate       myx   myz
  <date>     <dbl> <dbl>
1 2018-02-01     1     2
2 2018-02-02     2     3
3 2018-02-03     3     2
4 2018-02-04     4     3
5 2018-02-05     5     1

我的问题是,我有另一个包含感兴趣日期的
tibble
,我想在上面的图表中为这些日期绘制垂直线

events <- tibble(mydate = c(ymd('2018-02-03'),
                            ymd('2018-02-05')))
事件1)面板功能使用如下面板功能:

xyplot(myx + myz ~ mydate, dat, outer = TRUE, type = "l", layout = 1:2, 
  panel = function(...) {
    panel.xyplot(...)
    panel.abline(v = events$mydate)
  })
2)层或使用latticeExtra中的层:

library(latticeExtra)

xyplot(myx + myz ~ mydate, dat, outer = TRUE, type = "l", layout = 1:2) +
  layer(panel.abline(v = mydate), data = events)
2a)xyplot.zoo注意,使用zoo可以稍微简化:

library(latticeExtra)
library(zoo)

z <- read.zoo(dat)
xyplot(z) + layer(panel.abline(v = mydate), data = events)


vline太棒了。很好的东西。这个
lattice
包对于时间序列来说比
ggplot
好得多,如果有一种简单的方法来修改代码,使第一个图表上只显示第一个日期,而第二个图表上只显示第二个日期,那么作为一个跟进?我有点挣扎。。。谢谢不,第一组中的第一条垂直线,第二组中的第二条垂直线。谢谢好东西。。。这个图层比基本晶格中可怕的面板语法要好得多。。。谢谢已将评论转移到答案末尾的注释中。
library(latticeExtra)
library(zoo)

z <- read.zoo(dat)
xyplot(z) + layer(panel.abline(v = mydate), data = events)
xyplot(z) +
  layer(panel.abline(v = mydate[1]), data = events, packets = 1) +
  layer(panel.abline(v = mydate[2]), data = events, packets = 2)
vline <- function(i) {
  layer(panel.abline(v = events$mydate[i]), data = list(i = i), packets = i)
}
Reduce("+", init = xyplot(z), lapply(1:2, vline))