python - 简单的指数平滑预测不在 Python 中的实际数据之上绘制
问题描述
我正在使用 statsmodels 包中的 SimpleExpSmoothing。我创建了一个时间序列数据框。我能够为预测和实际数据创建图表。但是当我尝试将它们绘制在一起时,它们会显示为单独的图。我想在实际数据之上绘制预测图。
我正在使用 statsmodels 0.9.0、python 3.6.8 和 matplotlib 3.0.2
# Simple Exponential Smoothing
fit1 = SimpleExpSmoothing(df1).fit(smoothing_level=0.2,optimized=False)
fcast1 = fit1.forecast(12).rename(r'$\alpha=0.2$')
# plot
fcast1.plot(marker='o', color='blue', legend=True)
fit1.fittedvalues.plot(marker='o', color='blue')
fit2 = SimpleExpSmoothing(df1).fit(smoothing_level=0.6,optimized=False)
fcast2 = fit2.forecast(12).rename(r'$\alpha=0.6$')
# plot
fcast2.plot(marker='o', color='red', legend=True)
fit2.fittedvalues.plot(marker='o', color='red')
fit3 = SimpleExpSmoothing(df1).fit()
fcast3 = fit3.forecast(12).rename(r'$\alpha=%s$'%fit3.model.params['smoothing_level'])
# plot
fcast3.plot(marker='o', color='green', legend=True)
fit3.fittedvalues.plot(marker='o', color='green')
df1.plot()
plt.show()
我有两张图,一张是所有预测图,一张是实际数据图。我想要一个在实际之上的预测图。
解决方案
这与 Statsmodels 无关,它只是 Pandas 绘图的工作原理。确保它们都绘制在同一个图中的一种方法是自己构建图,然后显式传递轴:
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
# ...
fcast1.plot(ax=ax, marker='o', color='blue', legend=True)
fit1.fittedvalues.plot(ax=ax, marker='o', color='blue')
# etc.
df1.plot(ax=ax)
推荐阅读
- python - 使用 MongoDB 的嵌套文档创建 Pandas 表
- c++ - 为什么我会在此遇到“标准输出无响应”错误?
- r - SVM 插入符号错误:“无法计算标准偏差......缺少 TRUE/FALSE 需要的值”
- python-3.x - 如何使用 python selenium 选择 jira 中的第一个条目
- xml - 如果事先不知道 Java 对象,如何将 XML 转换为 Java 对象?
- java - 需要帮助理解这种插入方法的结构
- css - 溢出相对定位父级的绝对定位伪元素设置为溢出:隐藏
- amazon-web-services - 由于变量太长,AWS CLI S3 COPY 命令获取 FINDSTR 错误?
- javascript - 当我单击类别时打开子类别但是当我单击子类别时未打开它的子类别
- java - 如何使用java jersey将示例json对象添加到swagger body?