instalar - ggplot2 r install
¿Cómo se establecen diferentes límites de escala para diferentes facetas? (2)
No creo que esto sea posible todavía en ggplot2. Esta discussion de enero sugiere que el tema está bajo consideración.
Algunos datos de muestra:
dfr <- data.frame(
x = rep.int(1:10, 2),
y = runif(20),
g = factor(rep(letters[1:2], each = 10))
)
Un simple diagrama de dispersión con dos facetas:
p <- ggplot(dfr, aes(x, y)) +
geom_point() +
facet_wrap(~ g, scales = "free_y")
Puedo establecer los límites del eje para todos los paneles con
p + scale_y_continuous(limits = c(0.2, 0.8))
(o un envoltorio para esto como ylim
)
pero, ¿cómo configuro diferentes límites de ejes para diferentes facetas?
La forma reticular para hacerlo sería pasar una lista a este argumento, por ejemplo,
p + scale_y_continuous(limits = list(c(0.2, 0.8), c(0, 0.5)))
Desafortunadamente eso solo arroja un error en el caso de ggplot2.
EDITAR:
Aquí hay un truco parcial. Si desea ampliar el rango de las escalas, puede agregar columnas a su conjunto de datos especificando los límites, luego dibujarlas con geom_blank
.
Conjunto de datos modificado:
dfr <- data.frame(
x = rep.int(1:10, 2),
y = runif(20),
g = factor(rep(letters[1:2], each = 10)),
ymin = rep(c(-0.6, 0.3), each = 10),
ymax = rep(c(1.8, 0.5), each = 10)
)
Parcela actualizada:
p + geom_blank(aes(y = ymin)) + geom_blank(aes(y = ymax))
Ahora las escalas son diferentes y la izquierda es correcta. Desafortunadamente, la escala de la mano derecha no se contrae, ya que necesita dejar espacio para los puntos.
En caso de que ayude, ahora podemos reformular la pregunta ya que "¿es posible dibujar puntos sin recalcular las escalas y sin llamar explícitamente a scale_y_continuous
?"
Para contraer la escala en el diagrama de la izquierda, elimine los puntos que se encuentran fuera del rango. Por ejemplo, esto reducirá la escala y en el gráfico de la derecha a valores entre 0 y 0.5:
p <- ggplot(dfr, aes(x, y)) +
geom_point(subset=.(g == "a" | (y > 0 & y <.5))) +
geom_blank(aes(y = ymin)) + geom_blank(aes(y = ymax)) +
facet_wrap(~ g, scales = "free_y")
Ver también mi respuesta a esta question .