es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Dos columnas facet_grid con etiquetas de franjas en la parte superior

facet_grid y facet_wrap tienen sus propias limitaciones.

facet_wrap no tiene un argumento space = "free", lo que resulta en gráficos con ejes y poco atractivos (ver https://stackoverflow.com/questions/70356131/add-space-argument-to-facet-wrap para el código).

imagen de descripción

facet_grid se ve limitado por tener etiquetas en el lateral (ver https://stackoverflow.com/questions/70356131/add-space-argument-to-facet-wrap para el código).
imagen de descripción

Se han dado soluciones para mover las etiquetas de facet_grid hacia arriba (ver https://stackoverflow.com/questions/29008683/ggplot2-using-gtable-to-move-strip-labels-to-top-of-panel-for-facet-grid/29022188#29022188).

¿Es posible utilizar la solución https://stackoverflow.com/questions/29008683/ggplot2-using-gtable-to-move-strip-labels-to-top-of-panel-for-facet-grid/29022188#29022188 para crear una figura de 2 columnas, como se crearía utilizando el argumento ncol = 2 con facet_wrap, o se puede lograr la solución utilizando facet_wrap en sí? La solución debería lucir como se muestra a continuación, con un espaciado similar en el eje y al ejemplo de facet_grid.

imagen de descripción

Los requisitos son: etiquetas en la parte superior, espaciado adecuado en el eje y ambos ejes x utilizan la misma escala.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible utilizar la solución proporcionada en https://stackoverflow.com/questions/29008683/ggplot2-using-gtable-to-move-strip-labels-to-top-of-panel-for-facet-grid/29022188#29022188 para crear una figura de 2 columnas con un espaciado similar en el eje y como en el ejemplo de facet_grid anterior. La solución implica utilizar el paquete gridExtra para combinar dos gráficos generados usando facet_wrap y luego utilizar gtable, como se explica en la publicación mencionada de Stack Overflow.

    Para lograr la solución utilizando solo facet_wrap, podemos utilizar los argumentos scales y space. El argumento scales, cuando se establece en “free_y”, garantizará que cada tira tenga su propia escala en el eje y, mientras que el argumento space, cuando se establece en “free”, garantizará que las escalas en el eje y sean independientes y que los gráficos tengan un espaciado adecuado en el eje y. Al combinar los gráficos generados a través de facet_wrap usando gridExtra, podemos obtener la figura de 2 columnas deseada con etiquetas en la parte superior y ambos ejes x utilizando la misma escala.

    Aquí tienes un ejemplo de código:

    library(ggplot2)
    library(gridExtra)
    
    # crear dos gráficos, cada uno con 4 facetes utilizando facet_wrap
    p1 <- ggplot(mtcars, aes(x = wt, y = mpg)) +
      geom_point() +
      facet_wrap(~ cyl, ncol = 2, scales = "free_y", space = "free") +
      labs(x = NULL, y = NULL) +
      theme(strip.background = element_blank(),
            strip.text.x = element_blank(),
            panel.spacing.y = unit(0.1, "lines"))
    
    p2 <- ggplot(mtcars, aes(x = wt, y = disp)) +
      geom_point() +
      facet_wrap(~ cyl, ncol = 2, scales = "free_y", space = "free") +
      labs(x = NULL, y = NULL) +
      theme(strip.background = element_blank(),
            strip.text.x = element_blank(),
            panel.spacing.y = unit(0.1, "lines"))
    
    # combinar los gráficos utilizando gridExtra
    grid.arrange(p1, p2, ncol = 2, top = "Título", bottom = "Etiqueta del eje X")
    

    Esto debería resultar en una figura de 2 columnas con etiquetas en la parte superior, un espaciado adecuado en el eje y y ambos ejes x utilizando la misma escala.

Comments are closed.