无法使用matplotlib绘制预测的时间序列值

13

我想绘制实际时间序列值和预测值,但是出现了这个错误:

ValueError: 视图限制最小值-36816.95989583333小于1且为无效的Matplotlib日期值。如果将非日期时间值传递给具有日期时间单位的轴,则经常会发生这种情况。

我正在使用 statsmodels 将 arima 模型拟合到数据中。

这是我的数据样本:

datetime             value
2017-01-01 00:00:00  10.18
2017-01-01 00:15:00  10.2
2017-01-01 00:30:00  10.32
2017-01-01 00:45:00  10.16
2017-01-01 01:00:00  9.93
2017-01-01 01:15:00  9.77
2017-01-01 01:30:00  9.47
2017-01-01 01:45:00  9.08

这是我的代码:

mod = sm.tsa.statespace.SARIMAX(
    subset,
    order=(1, 1, 1),
    seasonal_order=(1, 1, 1, 12),
    enforce_stationarity=False,
    enforce_invertibility=False
)

results = mod.fit()
pred_uc = results.get_forecast(steps=500)
pred_ci = pred_uc.conf_int(alpha = 0.05)

# Plot
fig = plt.figure(figsize=(12, 8))
ax = fig.add_subplot(1, 1, 1)
ax.plot(subset,color = "blue")
ax.plot(pred_uc.predicted_mean, color="black", alpha=0.5, label='SARIMAX')
plt.show()

有什么办法可以解决这个问题吗?


6
请提供一个 MCVE - Vivek Kalyanarangan
也请提供您正在处理的数据样本以下是翻译后的文本:也请提供您正在处理的数据样本 - Vivek Kalyanarangan
1
抱歉,我的意思是 subset = subset.set_index("datetime") @Georgy - Joey12
1
@Georgy,错误已经消失了,我不记得是怎么回事了,但现在我又遇到了另一个问题,ARIMA模型与数据拟合不良。 - Joey12
7
那我建议创建另一篇帖子。这篇帖子应该被标记为“一个无法再现的问题”。 - Georgy
显示剩余8条评论
1个回答

1
这应该是关于如何提供数据的问题。
在您的数据子集变量中,datetime值必须是values的索引,因此以下内容有效。
我已经在您提供的代码之前按照以下方式导入了数据:
import matplotlib.pyplot as plt

import numpy as np

import pandas as pd

import statsmodels.api as sm

subset = pd.Series(

[

    10.18, 10.2 , 10.32,
    10.16, 9.93, 9.77,
    9.47, 9.08

]

, index=pd.date_range(

    start='2017-01-01T00:00:00.000',

    end='2017-01-01T01:45:00.000',

    freq='15T'

)  )

我想我已经得到了您所需的情节(已删减):

plot_result_cut.

我在Python 3中使用了以下版本的库:

matplotlib.version '3.1.2'

numpy.version '1.17.4'

pandas.version '0.25.3'

statsmodels.version '0.12.0'


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接