varias tutorial superponer los lineas graficos graficas ggplot etiquetas espaƱol escala ejes como cambiar avanzados r ggplot2 layer

tutorial - Insertar capa debajo de las capas existentes en el objeto ggplot2



superponer graficas en r ggplot (2)

Como se muestra en la documentación de ggplot here , puede configurar un objeto ggplot esqueleto y agregar capas. El orden en que especifica las capas es el orden en que aparecerán en su parcela.

Esto obtendrá su salida esperada:

ggplot() + geom_boxplot(data = dat, aes(x=id, y=val)) + geom_point(data = dat, aes(x=id, y=val))

Esto obtendrá su salida incorrecta:

ggplot() + geom_point(data = dat, aes(x=id, y=val)) + geom_boxplot(data = dat, aes(x=id, y=val))

Creo que esto también responde a tu pregunta extra :)

Dado un objeto de trazado existente, ¿es posible agregar una capa BAJO UNA capa existente?

Por ejemplo, en el gráfico a continuación, ¿es posible agregar geom_boxplot() a P tal manera que el diagrama de caja aparezca debajo de geom_point() ?

## Starting from: library(ggplot2) P <- ggplot(data=dat, aes(x=id, y=val)) + geom_point() ## This adds boxplot, but obscures some of the points P + geom_boxplot()

Rendimiento esperado:

# Which is essentially ggplot(data=dat, aes(x=id, y=val)) + geom_boxplot() + geom_point() ## However, this involves re-coding all of P (after the point insertion of the new layer). ## which is what I am hoping to avoid.

Pregunta extra: si hay varias capas en el trazado existente, ¿es posible indicar dónde insertar específicamente la nueva capa (con respecto a las capas existentes)?

DATA DE MUESTRA

set.seed(1) N <- 100 id <- c("A", "B") dat <- data.frame(id=sample(id, N, TRUE), val=rnorm(N))


Gracias @baptiste por indicarme la dirección correcta. Para insertar una capa debajo de todas las demás capas, simplemente modifique el elemento de layers del objeto de trazado.

## For example: P$layers <- c(geom_boxplot(), P$layers)

Respuesta a la pregunta de bonificación:

Esta pequeña y práctica función inserta una capa en un nivel z designado:

insertLayer <- function(P, after=0, ...) { # P : Plot object # after : Position where to insert new layers, relative to existing layers # ... : additional layers, separated by commas (,) instead of plus sign (+) if (after < 0) after <- after + length(P$layers) if (!length(P$layers)) P$layers <- list(...) else P$layers <- append(P$layers, list(...), after) return(P) }