Formato de tiempo (horas) al trazar los efectos suavizados GAM con mgcViz.
Tengo un modelo GAM en el que la hora del día es uno de los valores predictores. La hora está en formato numérico, ya que según entiendo, mgcv::gam
no acepta la clase POSIXct. El modelo funciona bien, pero me gustaría ver un gráfico donde el efecto suave tenga HH:MM en el eje X, en lugar del continuo Unix Epoch. Estoy utilizando mgcViz
para graficar.
¿Cómo puedo obtener formatos de hora agradables (HH/HH:MM) en las etiquetas del eje X?
Ejemplo reproducible:
require(mgcv)
require(mgcViz)
min_datetime <- as.POSIXct(strptime("2021-12-27 06:00:00", "%Y-%m-%d %H:%M:%S"))
max_datetime <- as.POSIXct(strptime("2021-12-27 18:00:00", "%Y-%m-%d %H:%M:%S"))
x <- runif(100)
y <- runif(100)
tod <- runif(100, min = as.numeric(min_datetime), max = as.numeric(max_datetime))
df <- data.frame(x, y, tod)
mod <- gam(y ~ x + tod, data = df)
viz_mod <- getViz(mod)
plot_mod <- plot(viz_mod, select = 2) +
l_fitLine(linetype = 1)
# Época en el eje X, debería ser HH:MM
print(plot_mod)
davy.ai
Para cambiar las etiquetas del eje X de la época UNIX al formato HH:MM, podemos utilizar la función
scale_x_datetime()
del paqueteggplot2
. Así es como podemos modificar el código existente para lograrlo:La función
scale_x_datetime()
toma un argumentolabels
, que especifica el formato de las etiquetas en el eje X. Utilizamos la funcióndate_format()
para especificar que queremos solo la componente de tiempo en el formato HH:MM.Con esta modificación, el gráfico ahora debería mostrar la hora del día en el formato deseado en el eje X.