You need to enable JavaScript to run this app. 如何从Prophet的AxesSubplot组件图中提取数据定位年度趋势极值日期
优惠活动
大模型
产品
解决方案
定价
更多

如何从Prophet的AxesSubplot组件图中提取数据定位年度趋势极值日期

提取Prophet组件图数据的两种实现方式

方法一:直接从matplotlib子图提取线条数据集

注:matplotlib Figure对象存储所有子图的属性为axes(你提到的axis为单个坐标轴的代称,属于常见笔误),目标axes[2]为存放年度趋势组件的AxesSubplot对象,所有绘制在子图内的线条对象都存储在子图的lines属性中,可直接调取坐标数据:

  1. 定位目标子图的线条对象
    target_ax = fig2.axes[2]
    # 组件图内通常只有1条主展示线,取索引0的Line2D对象
    plot_line = target_ax.lines[0]
    
  2. 提取线条对应的原始数值坐标
    # x轴是matplotlib数值化处理后的日期值,y轴是对应组件的数值
    x_vals = plot_line.get_xdata()
    y_vals = plot_line.get_ydata()
    
  3. 将数值化的x日期转回可读的datetime格式
    import matplotlib.dates as mdates
    # 去掉时区信息避免类型不匹配
    x_dates = [mdates.num2date(x).replace(tzinfo=None) for x in x_vals]
    
    此时得到的x_dates和y_vals就是该子图线条一一对应的日期、组件数值数组。

方法二:直接从forecast结构化结果提取(推荐)

实际上m.predict()生成的forecast本身就是包含所有组件拆分结果的结构化DataFrame,完全不需要从绘图结果绕路提取,准确率更高也更稳定:

  • 组件图的子图和DataFrame列是一一对应的:
    • axes[0] 对应全局趋势,在forecast中的列名为trend
    • 按顺序往后的子图,分别对应周度、年度等季节性分量,默认年度分量在forecast中的列名为yearly
    • x轴的日期列统一为forecast的ds列
  • 直接定位年度分量最大值对应的日期,只需执行:
    # 定位年度分量最大值的行索引
    max_row_idx = forecast['yearly'].idxmax()
    # 取出对应日期和数值
    max_yearly_date = forecast.loc[max_row_idx, 'ds']
    max_yearly_val = forecast.loc[max_row_idx, 'yearly']
    

注意:如果训练模型时自定义过季节性的名称,只需将代码中的yearly替换为你自定义的分量列名即可。

内容的提问来源于stack exchange,提问作者Travasaurus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.02 08:00:08