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

ggplot2中stat_smooth绘制多项式曲线不光滑,如何优化?

解决ggplot2中三次多项式回归曲线不光滑的问题

你遇到的曲线不光滑,核心原因是x变量(Kategorie)只有4个离散值,stat_smooth默认只会在这4个原始x点上进行预测,连接起来自然是折线而非光滑曲线。下面提供两种解决方法:


方法1:手动生成连续预测点绘制光滑曲线

通过拟合模型、生成连续x序列、预测y值的方式,完全控制曲线的光滑度:

# 构造原始数据框
AHorizontKat <- data.frame(
  Kategorie = c(1,2,3,4),
  Solidago = c(20.5, 24.6, 29.9, 352.9)
)

# 拟合三次多项式回归模型
model <- lm(Solidago ~ poly(Kategorie, 3), data = AHorizontKat)

# 生成100个连续的x预测点(覆盖原始x范围)
pred_x <- seq(min(AHorizontKat$Kategorie), max(AHorizontKat$Kategorie), length.out = 100)
pred_data <- data.frame(Kategorie = pred_x)
# 预测对应y值
pred_data$Solidago_pred <- predict(model, newdata = pred_data)

# 绘图
ggplot(AHorizontKat, aes(Kategorie, Solidago)) +
  geom_point() +
  # 添加光滑预测曲线
  geom_line(data = pred_data, aes(y = Solidago_pred), size = 0.1) +
  xlab("A-Horizont in cm") +
  ylab("Mittelwert Fläche in m²") +
  # 保留分类标签,同时按连续数值处理x轴
  scale_x_continuous(
    breaks = c(1,2,3,4),
    labels = c("1 bis 3", "4 bis 6", "7 bis 9", ">10")
  )

方法2:修改stat_smooth的预测点数量

如果想继续使用stat_smooth,可以通过n参数指定更多预测点,同时将x轴改为连续型(否则n参数无效):

ggplot(AHorizontKat, aes(Kategorie, Solidago))+
  geom_point()+
  # 设置n=100增加预测点数量
  stat_smooth(method = 'lm', formula = y~poly(x,3), se=FALSE, size = 0.1, n = 100)+
  xlab("A-Horizont in cm")+
  ylab("Mittelwert Fläche in m²")+
  scale_x_continuous(
    breaks = c(1,2,3,4),
    labels = c("1 bis 3", "4 bis 6", "7 bis 9", ">10")
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 19:35:26