开发者

Is it possible to update a lattice panel in R?

The update method of trellis plots allows one to modify a lattice plot after the initial call. But the update behaviour is more like replace than append. This differs from the ggplot2 idiom where each new layer is additive to what exists already. Is it possible to get this additive behaviour using lattice?

An example:

LL <- barchart(yield ~ variety | site, data = barley,
        groups = year, stack = TRUE,
        between=list(y=0.5),
        scales = list(x = list(rot = 90)))
print(LL)

Is it possible to update a lattice panel in R?

Now I want to add panel.text to the existing plot. Using update in the following way doesn't work:

update(LL, panel=function(...){
           args <- list(...); panel.text(args$x, args$y+2, round(args$y, 0))
         })

Is it possible to update a lattice panel in R?

I know that I can use update by specifying all of the layers in the panel function:

update(LL, panel=funct开发者_StackOverflow中文版ion(...){
           args <- list(...)
           panel.barchart(...)
           panel.text(args$x, args$y+2, round(args$y, 0))
         })

This will work, but requires that I know what is already in the lattice plot - or that I refactor my code quite substantially.

Question: Is there a way of adding to the existing panel in update.trellis?


See layer from the latticeExtra package.

library(lattice)
library(latticeExtra)
LL <- barchart(yield ~ variety | site, data = barley,
        groups = year, stack = TRUE,
        between=list(y=0.5),
        scales = list(x = list(rot = 90)))
LL + layer(panel.text(x, y, round(y, 0), data=barley))

Is it possible to update a lattice panel in R?


Here is a way to do it without latticeExtra. Admittedly, it's more complicated and difficult than the latticeExtra route. However, the flexibility with this trellis.focus method might be more useful in other contexts.

barchart(yield ~ variety | site, data = barley,
               groups = year, stack = TRUE,
               between=list(y=0.5),
               scales = list(x = list(rot = 90)))

panels  = trellis.currentLayout()
for( i in seq_along(panels) ) {
  ind = which( panels == i, arr.ind=TRUE )
  trellis.focus("panel",ind[2],ind[1])
  vars = trellis.panelArgs()
  panel.text(vars$x,vars$y,round(vars$y,0))
}

Is it possible to update a lattice panel in R?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜