使用 mgcViz 绘制 GAM 平滑效果时的时间(小时)格式
Time (hours) formatting when plotting GAM smooth effects with mgcViz
我有一个 GAM 模型,其中时间是预测变量值之一。时间是数字格式,因为据我所知,mgcv::gam
不接受 POSIXct class。该模型运行良好,但我希望看到平滑效果在 X 轴上具有 HH:MM 的图,而不是连续的 UNIX 纪元。我正在使用 mgcViz
进行绘图。
如何在 X 轴标签上获得漂亮的时间格式 (HH/HH:MM)?
可重现的例子:
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)
# Epoch on X-axis, should be HH:MM
print(plot_mod)
由于 mgcViz
是 ggplot2
的包装器,您可以使用标准 ggplot2::scale_...
函数来操作您的标签、中断或您希望在图中显示的任何其他内容。这里我们可以使用 scale_x_continuous
将数字 x
轴转换回 POSIXct
然后根据需要格式化它。
plot_mod +
scale_x_continuous(labels = ~ format(as.POSIXct(.x, origin = origin), "%H:%M"))
我有一个 GAM 模型,其中时间是预测变量值之一。时间是数字格式,因为据我所知,mgcv::gam
不接受 POSIXct class。该模型运行良好,但我希望看到平滑效果在 X 轴上具有 HH:MM 的图,而不是连续的 UNIX 纪元。我正在使用 mgcViz
进行绘图。
如何在 X 轴标签上获得漂亮的时间格式 (HH/HH:MM)?
可重现的例子:
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)
# Epoch on X-axis, should be HH:MM
print(plot_mod)
由于 mgcViz
是 ggplot2
的包装器,您可以使用标准 ggplot2::scale_...
函数来操作您的标签、中断或您希望在图中显示的任何其他内容。这里我们可以使用 scale_x_continuous
将数字 x
轴转换回 POSIXct
然后根据需要格式化它。
plot_mod +
scale_x_continuous(labels = ~ format(as.POSIXct(.x, origin = origin), "%H:%M"))