如何在R中用matlines和matplot实现线性基与数据及预测模型同图绘制?
解决R中线性基、数据点与预测模型同图绘制问题
问题根源
你的代码存在两个核心问题:
- 连续调用
matplot和plot会生成两张独立画布,导致最终输出两张图。 - 最后一行
matlines的参数逻辑错误:你将基函数矩阵作为x轴输入,而预测值作为y轴,这会把基函数的每一列当作独立x轴,与预测值强行配对,直接导致轴显示异常、图形失真。
正确实现代码
# 加载依赖包与数据 require(faraway) require(splines) data(exa, package="faraway") # 生成分段线性B样条基矩阵 bs_matrix <- bs(exa$x, df=10, degree=1) # 拟合线性模型并生成预测值 lmod <- lm(y ~ bs_matrix, data=exa) pred_values <- predict(lmod) # 统一设置y轴范围,确保包含数据点、预测值和基函数值 y_total_range <- range(exa$y, pred_values, bs_matrix) # 绘制基础图:数据点 plot(y ~ x, exa, col=gray(0.75), ylim=y_total_range, ylab="y / Basis Function Values", main="Data, Prediction & Basis Functions") # 添加预测曲线(虚线) lines(exa$x, pred_values, lty=2, lwd=2, col="red") # 添加所有线性基函数曲线(蓝色实线) matlines(exa$x, bs_matrix, type="l", col="blue", lty=1)
代码说明
- 先统一计算y轴范围:确保数据点、预测值和基函数的取值都能在画布中显示。
- 以原始x轴为统一横轴,依次绘制数据点、预测曲线、基函数曲线,所有元素共享同一坐标系。
matlines的正确用法:第一个参数是统一的x轴向量(原始x),第二个参数是多列的y值矩阵(基函数矩阵),这样每一列对应一条基函数曲线。
内容的提问来源于stack exchange,提问作者Warhawk1987
相关产品推荐
相关产品推荐

