with update studio para desde descargar como code actualizar r plot lattice

update - ¿Es posible actualizar un panel de celosía en R?



update r packages (2)

Aquí hay una manera de hacerlo sin latticeExtra . Es cierto que es más complicado y difícil que la ruta de latticeExtra . Sin embargo, la flexibilidad con este método trellis.focus podría ser más útil en otros contextos.

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

El método de update de los gráficos trellis permite modificar un diagrama lattice después de la llamada inicial. Pero el comportamiento de la update es más parecido a reemplazar que anexar. Esto difiere del ggplot2 idioma donde cada nueva capa es aditiva a lo que ya existe. ¿Es posible obtener este comportamiento aditivo usando lattice ?

Un ejemplo:

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

Ahora quiero agregar panel.text al gráfico existente. Usar la update de la siguiente manera no funciona:

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

Sé que puedo usar la update especificando todas las capas en la función del panel:

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

Esto funcionará, pero requiere que yo sepa lo que ya está en la trama del lattice , o que refactorice mi código de manera bastante sustancial.

Pregunta: ¿Hay alguna manera de agregar al panel existente en update.trellis ?


Ver layer del paquete latticeExtra .

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