Agregar el argumento de espacio a facet_wrap
facet_wrap()
ha sido reconocido por no tener un argumento space = "free"
(https://github.com/tidyverse/ggplot2/issues/2933). Esto puede causar problemas de espaciado en el eje y de los gráficos.
Crea la figura anterior utilizando el siguiente código:
library(tidyverse)
p <-
mtcars %>%
rownames_to_column() %>%
ggplot(aes(x = disp, y = rowname)) + geom_point() +
facet_wrap(~ carb, ncol = 1, scales = "free_y")
Por otro lado, facet_grid()
tiene un argumento space = "free"
, lo que permite un buen espaciado en el eje y.
Crea la figura anterior utilizando el siguiente código:
p <-
mtcars %>%
rownames_to_column() %>%
ggplot(aes(x = disp, y = rowname)) + geom_point() +
facet_grid(carb ~ ., scales = "free_y", space = "free_y")
El problema con esto es que la etiqueta está en el lateral, no en la parte superior. A veces tengo etiquetas de facetas más largas y pocas filas en la faceta, lo que significa que la etiqueta de la faceta se recorta.
Existe una solución desde el paquete ggforce
(comentario de ilarischeinin en https://github.com/tidyverse/ggplot2/issues/2933).
p <-
mtcars %>%
rownames_to_column() %>%
ggplot(aes(x = disp, y = rowname)) + geom_point()
p + ggforce::facet_col(vars(carb), scales = "free_y", space = "free")
Sin embargo, hay limitaciones al usar ggforce
. Por ejemplo, en última instancia quiero una figura de dos columnas y esta funcionalidad no parece posible con ggforce
. ¿Hay alguna forma de obtener el mismo resultado utilizando facet_wrap()
para poder usar el argumento ncol()
?
davy.ai
Desafortunadamente, hasta ahora no hay forma de replicar el mismo resultado exacto que
ggforce::facet_col
utilizando el argumentoncol()
enfacet_wrap()
para utilizar exclusivamente el paqueteggplot2
. Sin embargo, hay un método alternativo que puede crear un efecto similar ajustando manualmente los márgenes del gráfico.Primero, establece el argumento
strip.text.y
enelement_blank()
en la funcióntheme()
para eliminar las etiquetas del eje y de los paneles:“`{r}
library(tidyverse)
p <- mtcars %>%
rownames_to_column() %>%
ggplot(aes(x = disp, y = rowname)) +
geom_point() +
facet_wrap(~ carb, ncol = 2, scales = “free_y”) +
theme(strip.text.y = element_blank())
Esto debería producir un gráfico con un espaciado similar al ejemplo de
ggforce::facet_col
, pero con los paneles dispuestos en forma de columna en lugar de una cuadrícula.Ten en cuenta que esta técnica no es un sustituto perfecto de
ggforce::facet_col
y es posible que no funcione bien con etiquetas de paneles más largas u otros casos de uso. Sin embargo, puede ser un método alternativo útil en algunas situaciones.