使用 mgcViz 绘制 GAM 平滑效果时的时间(小时)格式
Posted
技术标签:
【中文标题】使用 mgcViz 绘制 GAM 平滑效果时的时间(小时)格式【英文标题】:Time (hours) formatting when plotting GAM smooth effects with mgcViz 【发布时间】:2022-01-16 19:53:25 【问题描述】:我有一个 GAM 模型,其中一天中的时间是预测变量值之一。时间是数字格式,因为据我了解,mgcv::gam
不接受 POSIXct 类。该模型工作正常,但我希望看到平滑效果在 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)
【问题讨论】:
【参考方案1】:由于mgcViz
是ggplot2
的包装,您可以使用标准的ggplot2::scale_...
函数来操作您的标签、中断或绘图中您想要的任何其他内容。在这里,我们可以使用scale_x_continuous
将数字x
轴转换回POSIXct
,然后根据需要对其进行格式化。
plot_mod +
scale_x_continuous(labels = ~ format(as.POSIXct(.x, origin = origin), "%H:%M"))
【讨论】:
以上是关于使用 mgcViz 绘制 GAM 平滑效果时的时间(小时)格式的主要内容,如果未能解决你的问题,请参考以下文章