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")
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")
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í:
etc.
¡Cualquier ayuda sería apreciada!
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
yplot_presence
utilizando el código proporcionado en la pregunta. Luego, usamos la funciónplot_grid()
del paquetecowplot
para combinar los dos gráficos uno al lado del otro. También especificamosncol = 2
para organizar los gráficos en dos columnas yalign = "v"
para alinear verticalmente los gráficos. Finalmente, usamos el argumentolabels
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()
yxlab()
. Finalmente, mostramos el gráfico combinado utilizandoplot_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()
deggplot2
o la funcióntheme_set()
del paquetecowplot
.