R语言绘图中abline函数趋势线的数据定义问题求助
R 散点图添加趋势线实现方案
你可以直接基于现有数据拟合线性模型后传入abline函数,以下是可直接运行的完整代码:
# 导入原始数据 ten <- c(0.2,0.16,0.17,0.188) fifty <- c(0.1,0.24,0.17,0.166) hundred <- c(0.3,0.16,0.16,0.14) fiveh <- c(0,0.02,0.04,0.022) # 统一定义x、y变量,避免重复计算 x <- c(rep(10,4), rep(50,4), rep(100,4), rep(500,4)) y <- c(ten, fifty, hundred, fiveh) # 绘制原始散点图 plot(x, y, ylab= "% of Impaired Rivers", xlab= "Number of Observations", main= "samples from all rivers") # 拟合y对x的线性回归模型 lm_result <- lm(y ~ x) # 调用abline添加趋势线,设置红色、线宽2方便区分 abline(lm_result, col = "red", lwd = 2)
补充优化选项
如果需要在图上展示回归参数,可在上述代码后追加以下内容:
# 提取回归参数与拟合优度 intercept <- round(coef(lm_result)[1], 4) slope <- round(coef(lm_result)[2], 6) r_square <- round(summary(lm_result)$r.squared, 4) # 在图表空白区域添加标注 text(300, 0.25, paste0("趋势线公式:y = ", slope, "x + ", intercept, "\n拟合优度R² = ", r_square))
如果需要拟合分组均值的趋势线,可添加以下代码:
# 计算每个观测数分组的平均受损率 group_y <- tapply(y, x, mean) group_x <- as.numeric(names(group_y)) lm_group <- lm(group_y ~ group_x) # 添加蓝色虚线作为分组均值趋势线 abline(lm_group, col = "blue", lwd = 2, lty = 2)
核心逻辑说明
abline函数支持直接传入lm()返回的线性模型对象,会自动提取截距和斜率参数绘制直线,无需手动计算。你可以通过col调整颜色、lwd调整线宽、lty调整线型(1为实线,2为虚线)自定义趋势线样式。
内容的提问来源于stack exchange,提问作者rayner perdana
相关产品推荐
相关产品推荐

