Можно ли обновить решетчатую панель в R? - PullRequest
11 голосов
/ 04 октября 2011

Метод update для графиков trellis позволяет изменять график lattice после первоначального вызова.Но поведение update больше похоже на замену, чем на добавление.Это отличается от идиомы ggplot2, где каждый новый слой является дополнением к тому, что уже существует.Можно ли получить это аддитивное поведение, используя lattice?

Пример:

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

enter image description here

Теперь я хочу добавить panel.text ксуществующий сюжет.Использование update следующим образом не работает:

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

enter image description here

Я знаю, что могу использовать update, указав все слои в функции панели:

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

Это сработает, но требует, чтобы я знал, что уже есть в lattice графике, или достаточно существенно изменил мой код.

Вопрос: Есть ли способ добавить к существующей панели в update.trellis?

Ответы [ 2 ]

14 голосов
/ 04 октября 2011

См. layer из latticeExtra пакета

4 голосов
/ 30 октября 2013

Вот способ сделать это без latticeExtra. По общему признанию, это более сложно и сложно, чем маршрут latticeExtra. Однако гибкость этого метода trellis.focus может оказаться более полезной в других контекстах.

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

Output of code above

...