varias superponer los linea grosor graficos graficas ggplot escala ejes como cambiar avanzados r ggplot2

superponer - ggplot2: agrega una línea para el promedio por grupo



superponer graficas en r ggplot (2)

A partir de su pregunta, este df$x es relevante para sus datos, especialmente si puede reordenarlo. ¿Qué tal si usamos group como x y jitter la posición x para separar los puntos?

ggplot(data=df, aes(x=group,y=y,color=group)) + geom_point() + geom_jitter(position = position_jitter(width = 0.4)) + geom_errorbar(stat = "hline", yintercept = "mean", width=0.8,aes(ymax=..y..,ymin=..y..))

He usado la barra de errores en lugar de h_line (y he contraído ymax e ymin en y) porque hline es compleja. Si alguien tiene una mejor solución para esa parte, me encantaría verla.

actualizar

Si desea conservar el orden de X, intente con esta solución (con X modificado)

df$x = factor(df$x) ggplot(data = df, aes(x, y, group=group)) + facet_grid(.~group,space="free",scales="free_x") + geom_point() + geom_line(stat = "hline", yintercept = "mean")

library(ggplot2) orderX <- c("A" = 1, "B" = 2, "C" = 3) y <- rnorm(20) x <- as.character(1:20) group <- c(rep("A", 5), rep("B", 7), rep("C", 5), rep("A", 3)) df <- data.frame(x, y, group) df$lvls <- as.numeric(orderX[df$group]) ggplot(data = df, aes(x=reorder(df$x, df$lvls), y=y)) + geom_point(aes(colour = group)) + geom_line(stat = "hline", yintercept = "mean", aes(colour = group))

Quiero crear un gráfico como este:

Esto sí funciona, cuando no necesito reordenar los valores de X, sin embargo, cuando uso reordenar, ya no funciona.


A partir de ggplot2 2.x, este enfoque lamentablemente está roto.

El siguiente código proporciona exactamente lo que quería, con algunos cálculos adicionales por adelantado:

library(ggplot2) library(data.table) orderX <- c("A" = 1, "B" = 2, "C" = 3) y <- rnorm(20) x <- as.character(1:20) group <- c(rep("A", 5), rep("B", 7), rep("C", 5), rep("A", 3)) dt <- data.table(x, y, group) dt[, lvls := as.numeric(orderX[group])] dt[, average := mean(y), by = group] dt[, x := reorder(x, lvls)] dt[, xbegin := names(which(attr(dt$x, "scores") == unique(lvls)))[1], by = group] dt[, xend := names(which(attr(dt$x, "scores") == unique(lvls)))[length(x)], by = group] ggplot(data = dt, aes(x=x, y=y)) + geom_point(aes(colour = group)) + facet_grid(.~group,space="free",scales="free_x") + geom_segment(aes(x = xbegin, xend = xend, y = average, yend = average, group = group, colour = group))

La imagen resultante: