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

如何修正geom_smooth中2023拟合线过平滑,匹配2024波动

解决方法:修正geom_smooth的数据过滤逻辑

问题根源

你遇到的核心问题是:将2023年日期转成2024年后,2023数据集包含了全年365天的数据,而2024只有到6月28日的179天数据。geom_smooth默认会用所有可用数据拟合,数据点越多,拟合线自然越平滑——哪怕标准差更大。你之前的错误是把data参数放在了aes()里,这不符合ggplot的语法规则,data是geom层的独立参数,不能放在映射函数里。

正确实现步骤

首先确保你的数据集保留原始年份标识(比如加origin_year列),这样能区分两组数据,哪怕日期都转成了2024年。然后通过两种方式实现公平对比:

1. 先构建带原始年份的数据集

library(tidyverse)
library(lubridate)

# 生成2023全年数据,标记原始年份
df_2023 <- tibble(
  mdate = seq.Date(as.Date("2023-01-01"), as.Date("2023-12-31"), by = "day"),
  amount = rnorm(365, mean = 4, sd = 20),
  origin_year = 2023
)

# 生成2024年1-6月28日数据,标记原始年份
df_2024 <- tibble(
  mdate = seq.Date(as.Date("2024-01-01"), as.Date("2024-06-28"), by = "day"),
  amount = rnorm(179, mean = 4, sd = 15),
  origin_year = 2024
)

# 合并并统一日期年份为2024
plot_data <- bind_rows(df_2023, df_2024) %>%
  mutate(mdate_new = ymd(str_replace(mdate, "^2023", "2024")))

2. 方法一:分两次调用geom_smooth,分别过滤数据

针对两组数据单独设置拟合范围,确保2023只用到和2024相同的日期区间(到6月28日):

ggplot(plot_data, aes(x = mdate_new, y = amount, color = factor(origin_year))) +
  geom_line(alpha = 0.5) +
  # 2023数据仅取到2024-06-28的对应日期
  geom_smooth(
    data = plot_data %>% filter(origin_year == 2023 & mdate_new <= as.Date("2024-06-28")),
    method = "loess", se = TRUE
  ) +
  # 2024数据直接使用现有范围
  geom_smooth(
    data = plot_data %>% filter(origin_year == 2024),
    method = "loess", se = TRUE
  ) +
  labs(x = "日期(统一为2024年)", y = "金额", color = "原始年份") +
  theme_minimal()

3. 方法二:先整体过滤数据再绘图

如果不需要保留2023年6月28日之后的数据,先统一过滤再绘图,这样两组拟合线都会基于相同的日期范围:

# 过滤出2024-06-28之前的所有数据
filtered_data <- plot_data %>% 
  filter(mdate_new <= as.Date("2024-06-28"))

ggplot(filtered_data, aes(x = mdate_new, y = amount, color = factor(origin_year))) +
  geom_line(alpha = 0.5) +
  geom_smooth(method = "loess", se = TRUE) +
  labs(x = "日期(统一为2024年)", y = "金额", color = "原始年份") +
  theme_minimal()

关键语法修正

你之前的geom_smooth(aes(data= ...))是错误用法:data是geom层的参数,需要直接传递给geom_smooth()函数,而不是放在aes()内部(aes()仅用于映射变量,比如x、y、color等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 21:13:20