我在R(https://facebook.github.io/prophet/(中使用prophet
,我想在先知的预测图之上叠加变化点。 这是我的代码(df
是一个包含日期(第 ds
列(和值(第 y
列(的数据帧:
m <- prophet(df)
future <- make_future_dataframe(m, periods=5)
forecast <- predict(m, future)
plot(m, forecast, xlab="Day", ylab="Counts")
i = 0
while (i <= length(m$changepoints.t)) {
tmp <- m$changepoints[i]
abline(v=as.POSIXct(tmp), col='red')
i = i + 1
}
但是,更改点线永远不会显示。 我仔细检查了变化点是否在主要情节的范围内,并在abline
中尝试了as.Date
和as.POSIXct
。 这两种情况下都没有错误,但也没有变化点线。有人可以帮忙吗?
如果检查绘图对象的类:
class(plot(m,forecast,xlab="Day", ylab="Counts"))
。你会看到这是一个 ggplot 图形。此外,如果您访问m$changepoints
而不是m$changepoints.t
,您会发现模型的更改点已经采用 POSIXct 格式。
要将所有变化点绘制为垂直线,可以使用如下所示geom_vline
:
p <- plot(m,forecast,xlab="Day", ylab="Counts")
for (changepoint in m$changepoints) {
p <- p + geom_vline(xintercept = changepoint)
}
print(p)
> prophet
包对此有一个专用功能,add_changepoints_to_plot
。
在您的情况下,这将解决问题:
plot(m, forecast, xlab="Day", ylab="Counts") +
add_changepoints_to_plot(m)
有关自定义设置,请参阅?add_changepoints_to_plot
。