我似乎无法让 statsforecast.StatsForecast.plot 方法在 for 循环内显示。错误报告可能更合适,但这看起来很基本(而且我在其他地方看到过类似的代码),我相信我遗漏了一些东西。有一个类似的问题here,但我相信答案并不是真的可以接受。目标是可视化神经预测模型(例如 AutoNHITS)的 cross_validation 输出,例如在here中使用步骤 5 中的截止值完成的操作。
以下是一个可重现的小示例。计数器 var 对数据帧没有影响,并且在单次迭代 for 循环之外时,方法调用工作得非常好。我还尝试添加
plt.show()
或类似命令,但无济于事。
import pandas as pd
import numpy as np
from datetime import datetime, timedelta
from statsforecast import StatsForecast
times_arr = np.arange(datetime(1985,7,1), datetime(1988,3,27), timedelta(days=1)).astype(datetime).tolist()
test_df = pd.DataFrame({
'unique_id': ['a'] * 1000 + ['b'] * 1000,
'ds': times_arr + times_arr,
'y': np.random.random(2000)
})
for i in range(1):
StatsForecast.plot(test_df)
我认为最好的选择,但您可以将绘图保存为
png
图像,然后在新图中重新加载图像:
import pandas as pd
import numpy as np
from datetime import datetime, timedelta
from statsforecast import StatsForecast
import matplotlib.pyplot as plt
from io import BytesIO
times_arr = np.arange(datetime(1985,7,1), datetime(1988,3,27), timedelta(days=1)).astype(datetime).tolist()
test_df = pd.DataFrame({
'unique_id': ['a'] * 1000 + ['b'] * 1000,
'ds': times_arr + times_arr,
'y': np.random.random(2000)
})
for i in range(2):
fig = StatsForecast.plot(test_df)
# save figure as image in memory
tt = BytesIO()
fig.savefig(tt)
tt.seek(0)
# read image from the memory into an array
imgplot = plt.imread(tt)
# plot the image
fig, ax = plt.subplots(figsize=(16, 4))
plt.imshow(imgplot)
plt.show()