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

求助:使用stat_smooth结合geom_line绘制非逐点变化的平滑多折线图

解决ggplot中stat_smooth功能异常的问题

我仔细看了你的绘图代码,发现几个可能导致stat_smooth出问题的关键点,咱们一步步来排查修复:

1. 分组与颜色映射不一致

你在ggplot()全局映射里指定了colour = Day_Week,但geom_line却单独用group=Day Name``分组,同时stat_smooth还重复写了一遍aes映射。如果Day_Week和Day Name不是同一个变量,这会让分组逻辑彻底混乱——折线按Day Name分组,平滑曲线却按Day_Week分组,自然会出现异常。

建议统一分组规则:如果这两个变量是同一含义(比如只是命名不同),选其中一个同时作为分组和颜色的依据;如果含义不同,明确你希望平滑曲线按哪个变量分组。修改后的代码可以去掉stat_smooth里重复的aes:

Data_Arr %>% 
  ggplot(aes(x=Period, y=M_Min, colour = Day_Week, group = Day_Week)) + 
  geom_line() +  # 分组与颜色保持一致
  geom_hline(aes(yintercept= 120, linetype = "120MPM"), colour= 'lawngreen')+ 
  ylim(0,200)+ 
  stat_smooth() +  # 直接继承全局映射,无需重复定义
  theme_readable()

2. 检查Period变量的类型

如果Period是因子/字符串类型(比如像"早高峰""午间"这种分类值,或者是带格式的时间字符串),stat_smooth默认的loess拟合方法会失效——它需要连续的数值型x变量。你可以把Period转成数值型试试:

# 假设Period是类似"1""2""3"的因子,先转字符再转数值
Data_Arr$Period <- as.numeric(as.character(Data_Arr$Period))

# 再运行绘图代码
Data_Arr %>% 
  ggplot(aes(x=Period, y=M_Min, colour = Day_Week, group = Day_Week)) + 
  geom_line() + 
  geom_hline(aes(yintercept= 120, linetype = "120MPM"), colour= 'lawngreen')+ 
  ylim(0,200)+ 
  stat_smooth(method = "loess") +  # 显式指定拟合方法
  theme_readable()

3. 调整stat_smooth的拟合参数

如果数据量较大,loess方法可能拟合不稳定,你可以换用更适合大样本的拟合方法,比如gam(广义加性模型),或者给线性模型加多项式公式:

# 用gam方法生成平滑曲线,同时关闭置信区间突出曲线
Data_Arr %>% 
  ggplot(aes(x=Period, y=M_Min, colour = Day_Week, group = Day_Week)) + 
  geom_line(alpha = 0.5) +  # 给原始折线加透明度,避免和平滑曲线重叠
  geom_hline(aes(yintercept= 120, linetype = "120MPM"), colour= 'lawngreen')+ 
  ylim(0,200)+ 
  stat_smooth(method = "gam", formula = y ~ s(x), se = FALSE) + 
  theme_readable()

4. 排查数据异常

有时候stat_smooth失效是因为数据里存在NA值或极端异常值,你可以先清洗数据再绘图:

# 去除包含关键变量缺失值的行
Data_Arr_clean <- Data_Arr %>% drop_na(Period, M_Min, Day_Week)

# 用清洗后的数据重新绘图

你可以先从统一分组和检查变量类型这两步入手,这应该能解决大部分常见的stat_smooth异常问题~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:42:05