Aligning ggplot facets in a patchworked graph

Tengo un gráfico compuesto por varios ggplots uso combinado patchwork. He hecho un ggplot sólo consiste en el eje y. Esto funciona bien, pero las facetas no están alineadas sobre cada una. ¿Alguna idea de cómo hacer las facetas tienen el mismo tamaño y estar por encima?

enter image description here

Aquí está el código de parche:

y_axis + decreasers_p+late_bloomers_p + o2_lovers_p + solo_riders_p + plot_layout(widths = c(1, 10), 
                                                                        guides = "collect",
                                                                        design = 
                                                                        "12
                                                                         13
                                                                         14
                                                                         15") 


Y aquí está el código de ggplot:

solo_riders_p <- ggplot(solo_riders, aes(x=days_incubated, y=emission))+
  geom_point(aes(shape=compound, size=compound, fill=compound)) +
  scale_shape_manual(values=c(21, 25))+
  scale_size_manual(values=c(2.8, 2.5))+
  scale_fill_manual(values=c("black", "grey"))+
  labs(fill = "Compound", shape = "Compound", size = "Compound", 
       x = "Incubation time (days)", 
       y = "BVOC emission (nmol g-1 loi soil h-1)", 
       title = "solo_riders") +
  theme_bw() +
  facet_wrap(vars(jar), scales = "free_y")

y_axis <- ggplot(data.frame(l = decreasers_p$labels$y, x = 1, y = 1)) +
  geom_text(aes(x, y, label = l), angle = 90) + 
  theme_void() +
  coord_cartesian(clip = "off")

He aquí un ejemplo de cómo me gustaría que fuera (pero sin los títulos por encima de cada fila):

enter image description here

Pregunta hecha hace 3 años, 5 meses, 0 días - Por binarybuilder


2 Respuestas:

  • Para alinear las facetas en un gráfico compuesto por varios ggplots usando patchwork, puedes ajustar el tamaño de las facetas para asegurarte de que tengan el mismo tamaño y estén alineadas correctamente.

    Aquí te dejo un ejemplo modificado con el ajuste del tamaño de las facetas:

    R
    

    Definir los ggplots individualmente

    solo_riders_p <- ggplot(solo_riders, aes(x=days_incubated, y=emission))+ geom_point(aes(shape=compound, size=compound, fill=compound)) + scale_shape_manual(values=c(21, 25))+ scale_size_manual(values=c(2.8, 2.5))+ scale_fill_manual(values=c("black", "grey"))+ labs(fill = "Compound", shape = "Compound", size = "Compound", x = "Incubation time (days)", y = "BVOC emission (nmol g-1 loi soil h-1)", title = "solo_riders") + theme_bw() + facet_wrap(vars(jar), scales = "free_y") y_axis <- ggplot(data.frame(l = decreasers_p$labels$y, x = 1, y = 1)) + geom_text(aes(x, y, label = l), angle = 90) + theme_void() + coord_cartesian(clip = "off")

    Combinar los ggplots con patchwork y ajustar el tamaño de las facetas

    combined_plot <- y_axis + decreasers_p + late_bloomers_p + o2_lovers_p + solo_riders_p + plot_layout(widths = c(1, 10), guides = "collect", design = "12 13 14 15")

    Mostrar el gráfico combinado

    combined_plot

    Al ajustar el tamaño de las facetas en el plot_layout de patchwork, puedes lograr que las facetas tengan el mismo tamaño y estén alineadas correctamente en tu gráfico compuesto. Asegúrate de probar este código con tus datos y ajustarlo según sea necesario para obtener el resultado deseado. ¡Espero que esta solución te sea de ayuda!

    Respondida el Dec 18, 2020 a las 12:01 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Para alinear las facetas del gráfico compuesto en un parcheado, puedes usar la función plot_layout() con el argumento heights para especificar el tamaño de cada fila. En tu caso, ya que tienes un gráfico que solo consiste en el eje y, necesitarás establecer el ancho de esa fila a 0 para que no ocupe espacio horizontal.

    Aquí tienes el código actualizado:

    r
    library(patchwork)
    library(ggplot2)
    
    

    Datos de ejemplo

    decreasers_p <- ggplot(data.frame(x = 1:10, y = rnorm(10)), aes(x, y)) + geom_line() late_bloomers_p <- ggplot(data.frame(x = 1:10, y = rnorm(10)), aes(x, y)) + geom_line() o2_lovers_p <- ggplot(data.frame(x = 1:10, y = rnorm(10)), aes(x, y)) + geom_line() solo_riders_p <- ggplot(data.frame(x = 1:10, y = rnorm(10)), aes(x, y)) + geom_line()

    Gráfico de eje y

    y_axis <- ggplot(data.frame(l = decreasers_p$labels$y, x = 1, y = 1)) + geom_text(aes(x, y, label = l), angle = 90) + theme_void() + coord_cartesian(clip = "off")

    Parcheo de gráficos

    plot_layout(widths = c(1, 10), heights = c(0, 1), guides = "collect", design = "12 13 14 15") + y_axis + decreasers_p+late_bloomers_p + o2_lovers_p + solo_riders_p

    Este código creará un gráfico compuesto con las facetas alineadas verticalmente y el gráfico del eje y con un ancho de 0, lo que lo hará invisible en el gráfico final.

    Respondida el Dec 18, 2020 a las 12:08 - por Gemini

    Votos positivos: 0 | Votos negativos: 0