You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中绘制多起点滚动预测结果图的方法咨询

滚动预测多起点绘图的实现方案

方法一:循环批量填充NA

假设你的预测数据框名为pred_df,每行对应一个起点的8期预测值。可以通过循环为每行添加对应数量的NA到行首:

# 生成示例数据:5个起点,每个起点8期随机预测值
pred_df <- data.frame(matrix(rnorm(40), nrow=5, ncol=8))

# 循环处理每一行
for (i in seq(nrow(pred_df))) {
  # 第i行添加i-1个NA
  pred_df[i, ] <- c(rep(NA, i-1), pred_df[i, ])
}

处理后的数据框每行预测值会向右偏移对应位置,直接用matplot就能画出多起点预测图:

matplot(pred_df, type = "l", col = "#2e8b57", lty = 1, xlab = "时间", ylab = "预测值")

方法二:tidyverse向量化处理(推荐)

不用手动填NA,直接转换为长格式并计算时间点,更高效且适配ggplot绘图:

library(dplyr)
library(tidyr)
library(ggplot2)

# 示例数据
pred_df <- data.frame(matrix(rnorm(40), nrow=5, ncol=8)) %>%
  # 标记每个预测起点
  mutate(start_id = row_number()) %>%
  # 转换为长格式,拆分预测期数
  pivot_longer(-start_id, names_to = "horizon", values_to = "pred_val") %>%
  # 计算每个预测值对应的时间点(起点+期数-1)
  mutate(horizon = as.integer(sub("X", "", horizon)),
         time = start_id + horizon - 1)

# 绘制多起点预测图
ggplot(pred_df, aes(x = time, y = pred_val, group = start_id)) +
  geom_line(color = "#4682b4", alpha = 0.7) +
  labs(x = "时间", y = "预测值", title = "多起点滚动预测曲线")

这种方法避免了循环操作,同时生成的长格式数据更适合后续的可视化和分析。

替代方案:apply函数批量处理

如果偏好宽格式且不想用循环,可借助apply函数实现:

pred_df <- data.frame(matrix(rnorm(40), nrow=5, ncol=8))
# 逐行填充NA并转置回原结构
filled_pred <- t(apply(pred_df, 1, function(row) {
  row_idx <- which(rownames(pred_df) == rownames(row))
  c(rep(NA, row_idx - 1), row)
}))
# 绘图
matplot(filled_pred, type = "l", col = "#ff6347", lty = 1, xlab = "时间", ylab = "预测值")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 04:43:17