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
相关产品推荐
相关产品推荐

