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