无法在 for 循环内显示 Statsforecast 绘图功能

问题描述 投票:0回答:1

我似乎无法让 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)
python plot statsforecast
1个回答
0
投票

我认为最好的选择,但您可以将绘图保存为

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()

© www.soinside.com 2019 - 2024. All rights reserved.