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

如何从geom_smooth(method=loess)生成的平滑折线图提取365个值?

高效提取365个每日温度预测值的方法

不用从控制台逐个提取,直接通过loess模型拟合+预测的方式就能快速生成365个每日温度值,步骤如下:

1. 直接拟合loess模型并预测

这是最可靠高效的方式,跳过ggplot绘图环节,直接对原始数据建模:

示例代码

# 替换成你实际的4个数据点
original_data <- data.frame(
  day_of_year = c(1, 90, 180, 270),  # 一年中的第1、90、180、270天
  temperature = c(5, 15, 25, 12)     # 对应温度值
)

# 拟合loess模型,span参数控制平滑程度(小数据集建议设为1,避免警告)
loess_fit <- loess(temperature ~ day_of_year, data = original_data, span = 1)

# 生成1-365天的预测序列
daily_days <- data.frame(day_of_year = 1:365)
daily_temps <- predict(loess_fit, newdata = daily_days)

# 整理成最终的每日温度数据框
daily_temp_data <- cbind(daily_days, temperature = daily_temps)

2. 若已生成ggplot对象,可直接提取拟合数据

如果已经用geom_smooth画出了图,也能从ggplot对象里提取拟合后的数据集,不过默认生成的x值可能不是恰好1-365,建议再做一次插值:

library(ggplot2)

# 假设你已有的ggplot图
p <- ggplot(original_data, aes(x=day_of_year, y=temperature)) +
  geom_point() +
  geom_smooth(method = "loess", span = 1)

# 提取geom_smooth的拟合数据
smooth_fit_data <- ggplot_build(p)$data[[2]]

# 基于拟合数据插值生成1-365天的温度值
library(zoo)
daily_interp <- approx(smooth_fit_data$x, smooth_fit_data$y, xout = 1:365)
daily_temp_data <- data.frame(day_of_year = daily_interp$x, temperature = daily_interp$y)

关键提示

  • 调整span参数可以控制曲线平滑度:值越大曲线越平滑,小数据集设为1能避免"小数据集"警告,同时保证拟合结果贴合你的4个数据点。
  • 直接用loess()+predict()的方式比从图中提取数据更灵活,还能随时调整模型参数优化拟合效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:24:26