Ampliar las fechas de los ejes a un mes completo en cada faceta.
Estoy trazando estadísticas del enrutador (recopiladas de la herramienta de monitoreo de velocidad merlin en https://github.com/jackyaz/spdMerlin).
Los gráficos están divididos por año y mes, y quiero que el eje x de cada mes se extienda durante todo el mes, incluso cuando solo tengo parte de los datos de un mes.
En el siguiente ejemplo, los datos de enero de 2022 están incompletos (solo 6 horas aproximadamente de datos).
El código que he intentado:
library(tidyverse)
library(scales)
X.df <- read.csv(url("https://pastebin.com/raw/sGAzEDe6")) %>%
mutate(date = as.POSIXct(date, origin="1970-01-01"))
ggplot(X.df , aes(date, Download, colour = Download)) +
geom_line()+
facet_wrap(~ month, scale="free_x", ncol = 1) +
scale_colour_gradient(low="red", high="green", limits=c(0.0, 50), oob = squish) +
scale_x_datetime(date_labels = "%d/%m", breaks = "7 day", minor_breaks = "1 day") +
coord_cartesian(ylim = c(0, 60))
Nuevamente, quiero que el rango del eje x en cada faceta cubra todo el mes. Por lo tanto, quiero que el eje x para la faceta de 2021-12 se extienda desde el 1 de diciembre de 2021 hasta el 31 de diciembre de 2021, y el eje x para la faceta de 2022-01 se extienda desde el 1 de enero de 2022 hasta el 31 de enero de 2022.
¿Hay alguna forma de forzar esto dentro de ggplot2?
Un ejemplo adicional, más pequeño y autocontenido, para probar su código:
X.df <- tribble(
~date, ~month, ~Download,
"2021-12-01T00:30:36Z","2021-12",20.13,
"2021-12-07T06:30:31Z","2021-12",38.95,
"2021-12-14T08:00:31Z","2021-12",38.44,
"2021-12-21T09:30:29Z","2021-12",28.57,
"2021-12-28T16:00:31Z","2021-12",30.78,
"2021-12-31T13:00:28Z","2021-12",55.45,
"2022-01-01T00:00:28Z","2022-1",55.44,
"2022-01-01T02:30:29Z","2022-1",55.63,
"2022-01-01T03:00:29Z","2022-1",55.75,
"2022-01-01T05:00:29Z","2022-1",55.8,
"2022-01-07T03:00:29Z","2022-1",53.6,
"2022-01-07T05:00:29Z","2022-1",51.8
)
Como siempre, gracias de antemano. Pete
davy.ai
Para forzar que el eje X de cada faceta cubra el mes completo, podemos usar
scale_x_datetime
con los argumentosdate_breaks
,date_minor_breaks
ylimits
. Aquí está el código modificado:Configuramos el argumento
date_breaks
en"1 week"
ydate_minor_breaks
en"1 day"
para obtener marcas de referencia espaciadas correctamente. También establecemos el argumentolimits
en un vector de fechas POSIXct que corresponden al primero de cada mes para cada faceta. Esto le indica a ggplot2 que utilice esas fechas como límites en el eje X para cada faceta.Esto debería resultar en que el eje X abarque todo el mes incluso para datos incompletos.
Aquí está el gráfico resultante:
Y aquí está el código completo con el ejemplo más pequeño:
Esto produce el mismo gráfico que antes.