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

R语言如何修正来回绘制的多项式拟合线及调整最佳拟合线外观

问题原因

拟合线出现往复绘制的核心原因是Loblolly数据集的height列不是严格按从小到大排序的,lines()函数会按照传入的x值顺序逐点连接,当x值忽大忽小时,连线就会来回折返。你后续写的线性拟合绘制逻辑sort(height)+按order取fitted值是正确的,只是没有应用到多项式拟合的绘制上。

修复后的完整代码
# 加载内置Loblolly数据集
data("Loblolly")
# 拟合模型
yhat_pol = lm(age~poly(height,2), data = Loblolly)
yhat_lin = lm(age~height, data = Loblolly)

# 绘制散点图
plot(x=Loblolly$height, y=Loblolly$age, pch=16, xlab = "Height (ft)", ylab = "Age (yr)", main = "Height vs Age of Loblolly Pine Trees")

# 提取height的排序索引,统一用于两条拟合线绘制
height_order <- order(Loblolly$height)
# 绘制排序后的线性拟合线
lines(sort(Loblolly$height), fitted(yhat_lin)[height_order], col="red", lwd=2)
# 绘制排序后的多项式拟合线
lines(sort(Loblolly$height), fitted(yhat_pol)[height_order], col="green", lwd=2)

# 添加图例
legend("topleft", 
        legend = c("linear","polynomial"), 
        col = c("red","green"),
        lty = 1, lwd=3) 
拟合线外观调整方法

修改lines()函数的对应参数即可调整样式:

  • 线条粗细:调整lwd参数,数值越大线条越粗,默认值为1
  • 线条颜色:修改col参数,支持直接传入颜色名、十六进制色值,也可以用rgb()函数自定义带透明度的颜色
  • 线条类型:修改lty参数,常用取值包括1实线、2虚线、3点线、4点虚线、5长虚线

如果想要更顺滑的拟合线效果,也可以生成连续的x序列做预测,不需要依赖原始数据的离散点:

# 生成从height最小值到最大值的100个连续均匀取值
new_x <- seq(min(Loblolly$height), max(Loblolly$height), length.out = 100)
# 基于拟合模型预测对应y值
pol_y <- predict(yhat_pol, newdata = data.frame(height = new_x))
# 绘制顺滑的多项式拟合线
lines(new_x, pol_y, col="darkgreen", lwd=2, lty=2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:15:06