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

如何在ggplot2中连接历史数据与模型预测折线?

解决ggplot2中预测折线与历史数据末尾衔接的问题

场景说明

使用R语言,拥有Historical_Data(历史数据)和Model_Predictions(三类预测数据:A、B、C)两个数据集,需求是用ggplot2绘制:

  • 历史数据的折线图
  • 三类预测的mean_value折线从历史数据最后一个点开始延伸
  • 用low_value和high_value绘制预测的置信区间带

模拟数据集

先模拟符合结构的数据集:

library(tidyverse)

# 模拟历史数据:6个月的时间序列
set.seed(123)
Historical_Data <- tibble(
  date = seq.Date(as.Date("2023-01-01"), as.Date("2023-06-30"), by = "month"),
  value = rnorm(6, 50, 5)
)

# 模拟初始预测数据:无衔接历史的点
Model_Predictions <- tibble(
  category = rep(c("A", "B", "C"), each = 3),
  date = rep(seq.Date(as.Date("2023-07-01"), as.Date("2023-09-30"), by = "month"), 3),
  mean_value = c(rnorm(3, 52, 4), rnorm(3, 55, 3), rnorm(3, 48, 5)),
  low_value = mean_value - 3,
  high_value = mean_value + 3
)

初始问题:预测折线与历史数据断开

直接用初始数据绘图时,预测折线的起点是第一个预测日期,和历史数据最后一点没有连接:

# 初始绘图代码:折线无衔接
ggplot() +
  geom_line(data = Historical_Data, aes(x = date, y = value), color = "black", size = 1) +
  geom_line(data = Model_Predictions, aes(x = date, y = mean_value, color = category)) +
  geom_ribbon(data = Model_Predictions, aes(x = date, ymin = low_value, ymax = high_value, fill = category), alpha = 0.2) +
  theme_minimal()

解决方法:为预测数据集添加衔接点

核心思路是把历史数据的最后一个点,复制到每个预测类别下,作为预测折线的起始点:

# 提取历史数据最后一个点,并转换为预测数据的格式
last_hist_point <- Historical_Data %>% 
  slice(n()) %>% 
  mutate(
    category = NA,
    mean_value = value,
    low_value = value,
    high_value = value
  )

# 为每个预测类别添加衔接点,合并后按类别和日期排序
joined_predictions <- Model_Predictions %>%
  bind_rows(
    last_hist_point %>% mutate(category = "A"),
    last_hist_point %>% mutate(category = "B"),
    last_hist_point %>% mutate(category = "C")
  ) %>%
  arrange(category, date)

验证有效性:重新绘图

用修改后的数据集绘图,预测折线会从历史数据最后一点自然延伸,置信区间也同步衔接:

# 最终绘图代码:折线成功衔接
ggplot() +
  geom_line(data = Historical_Data, aes(x = date, y = value), color = "black", size = 1) +
  geom_line(data = joined_predictions, aes(x = date, y = mean_value, color = category)) +
  geom_ribbon(data = joined_predictions, aes(x = date, ymin = low_value, ymax = high_value, fill = category), alpha = 0.2) +
  theme_minimal()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 00:45:09