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 gráficos dentro de una misma faceta en ggplot2

Tengo dos tipos de datos para crear dos tipos de gráficos, barra y línea. Tienen ejes Y diferentes, pero el mismo eje X. Cada uno está categorizado por los mismos niveles de categoría.

Código de ejemplo:

data <- data.frame( Station = sample(LETTERS[seq( from = 1, to = 4 )],50, rep = TRUE),
                  Date = sample(seq(as.Date('2015/01/01'), as.Date('2015/12/31'), by="day"), 50),
                   Presence = sample(0:10,50,rep = TRUE),
                   Noise = sample(70:130,50, rep=TRUE))
noise <-  ggplot()+
    geom_line(data = data,aes(x=Date, y= Noise, color= Station))+
    scale_x_date(date_breaks = "1 month")+
    facet_wrap(~Station, ncol=2, strip.position="right")+
    theme(axis.title.x = element_text(margin = margin(t = 20)))+
    guides(colour = guide_legend(override.aes = list(size=3)))+
    coord_cartesian(xlim = c(as.Date("2015-02-01"),as.Date("2015-10-30")))+
    labs( x='Fecha')+
    theme_classic(base_family = "serif")

imagen1

pres <-ggplot()+
  geom_bar(data = data,aes(x= Date, y = Presence), stat = "identity")+
  scale_x_date(date_breaks = "1 month")+
  facet_wrap(~Station, ncol=2, strip.position="right")+
  theme(axis.title.x = element_text(margin = margin(t = 20)))+
  coord_cartesian(xlim = c(as.Date("2015-02-01"),as.Date("2015-10-30")))+
  labs( x='Fecha')+
  theme_classic(base_family = "serif")

imagen2

Lo que me gustaría hacer es combinar los dos gráficos, pero con la misma etiqueta de faceta (Station).

Un ejemplo rápido que hice en Photoshop se vería algo así:

imagen3

etc.

¡Cualquier ayuda sería apreciada!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para combinar los dos gráficos, podemos usar el paquete cowplot en R. Aquí está el código:

    “`{r}
    library(cowplot)

    plot_noise <- ggplot(data, aes(x=Date, y=Noise, color=Station))+
    geom_line()+
    scale_x_date(date_breaks = “1 month”)+
    facet_wrap(~Station, ncol=2, strip.position=”right”)+
    theme(axis.title.x = element_text(margin = margin(t = 20)))+
    guides(colour = guide_legend(override.aes = list(size=3)))+
    coord_cartesian(xlim = c(as.Date(“2015-02-01”),as.Date(“2015-10-30”)))+
    labs( x=’Fecha’)+
    theme_classic(base_family = “serif”)

    plot_presence <- ggplot(data, aes(x=Date, y=Presence))+
    geom_bar(stat = “identity”)+
    scale_x_date(date_breaks = “1 month”)+
    facet_wrap(~Station, ncol=2, strip.position=”right”)+
    theme(axis.title.x = element_text(margin = margin(t = 20)))+
    coord_cartesian(xlim = c(as.Date(“2015-02-01”),as.Date(“2015-10-30”)))+
    labs( x=’Fecha’)+
    theme_classic(base_family = “serif”)

    Combinar los dos gráficos usando cowplot

    plot_combined <- plot_grid(plot_presence, plot_noise, ncol = 2, align = “v”,
    labels = c(“A”,”B”,”C”,”D”))

    Agregar etiquetas de ejes x e y al gráfico combinado

    plot_combined <- plot_combined +
    ylab(“Ruido (dB)”)+
    xlab(“Fecha”)

    Mostrar el gráfico combinado

    plot_combined
    “`

    Primero, creamos los dos gráficos plot_noise y plot_presence utilizando el código proporcionado en la pregunta. Luego, usamos la función plot_grid() del paquete cowplot para combinar los dos gráficos uno al lado del otro. También especificamos ncol = 2 para organizar los gráficos en dos columnas y align = "v" para alinear verticalmente los gráficos. Finalmente, usamos el argumento labels para etiquetar cada faceta con los nombres respectivos de las estaciones.

    Para agregar etiquetas comunes de ejes x e y al gráfico combinado, usamos las funciones ylab() y xlab(). Finalmente, mostramos el gráfico combinado utilizando plot_combined.

    El gráfico resultante se verá así:

    [![enter image description here][1]][1]

    Ten en cuenta que es posible que debas ajustar el tamaño y la relación de aspecto del gráfico según tus necesidades. Puedes hacer esto utilizando la función theme() de ggplot2 o la función theme_set() del paquete cowplot.

Comments are closed.