r - ggplot - geom_smooth
R: ¿Cómo jitter tanto geom_line como geom_point en ggplot2 linegraph? (2)
Otra opción para horizontal solo sería especificar position_dodge
y pasar esto al argumento de position
para cada geom.
pd <- position_dodge(0.4)
ggplot(data = df, aes(x = dimension, y = value,
shape = Time, linetype = Time, group = Time)) +
geom_line(position = pd) +
geom_point(position = pd) +
xlab("Dimension") + ylab("Value")
Tengo un ggplot2
líneas ggplot2 con dos líneas que presentan una superposición significativa. Estoy tratando de usar position_jitterdodge()
para que sean más visibles, pero no puedo obtener las líneas y los puntos para ambos jitter de la misma manera. Intento oscilar los puntos y la línea horizontalmente solamente (ya que no quiero sugerir ningún cambio en el eje y). Aquí hay un MWE:
## Create data frames
dimension <- factor(c("A", "B", "C", "D"))
df <- data.frame("dimension" = rep(dimension, 2),
"value" = c(20, 21, 34, 32,
20, 21, 36, 29),
"Time" = c(rep("First", 4), rep("Second", 4)))
## Plot it
ggplot(data = df, aes(x = dimension, y = value,
shape = Time, linetype = Time, group = Time)) +
geom_line(position = position_jitterdodge(dodge.width = 0.45)) +
geom_point(position = position_jitterdodge(dodge.width = 0.45)) +
xlab("Dimension") + ylab("Value")
Lo que produce lo feo:
Obviamente, tengo algo fundamentalmente erróneo aquí: ¿qué debo hacer para que el jitter de geom_point
siga el jitter de geom_line
?
Una solución es agitar manualmente los puntos:
df$value_j <- jitter(df$value)
ggplot(df, aes(dimension, value_j, shape=Time, linetype=Time, group=Time)) +
geom_line() +
geom_point() +
labs(x="Dimension", y="Value")
La solución horizontal para su eje X discreto no es tan limpia (está limpia debajo de las cubiertas cuando ggplot2 lo hace, ya que maneja el eje y las transformaciones del punto para usted muy bien) pero es factible:
df$dim_j <- jitter(as.numeric(factor(df$dimension)))
ggplot(df, aes(dim_j, value, shape=Time, linetype=Time, group=Time)) +
geom_line() +
geom_point() +
scale_x_continuous(labels=dimension) +
labs(x="Dimension", y="Value")