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