使用smooth.spline绘制的图形未呈平滑曲线,请求排查错误
问题分析与修正方案
错误原因
你的代码中,smooth.spline确实拟合出了平滑样条模型,但调用lines(t, c$y)时,只是将原始4个数据点对应的拟合值用直线连接,自然呈现为折线——因为你只用到了4个离散点,没有利用样条模型的连续性生成足够多的点来展现平滑效果。另外,变量名c是R的内置函数,用它做变量名可能引发潜在问题,建议避免。
修正代码
Y <- c(0,2,-1,4) t <- c(1:4) plot(t,Y) # 拟合平滑样条,改用更安全的变量名 spl <- smooth.spline(t,Y,lambda=1) # 在原始t的范围内生成100个均匀分布的点,用于绘制平滑曲线 t_new <- seq(min(t), max(t), length.out = 100) # 基于拟合好的样条模型预测新点的y值 y_pred <- predict(spl, x = t_new)$y # 绘制平滑曲线 lines(t_new, y_pred, col = "red", lwd = 2)
关键说明
- 用
seq生成足够多的新点(比如示例中的100个),才能充分展现平滑样条的连续曲线形态 - 借助
predict函数从拟合好的样条模型中获取新点的预测值,再通过lines连接这些点,就能得到预期的平滑曲线
内容的提问来源于stack exchange,提问作者Johnny
相关产品推荐
相关产品推荐

