R空间数据计算各点到最大值点的欧氏距离并基于lm拟合绘图
具体实现步骤
你已经完成了数据框到SpatialPointsDataFrame的转换,后续操作可按以下步骤执行:
1. 提取variable取值最高的点位
# 取最大值点位的索引 max_idx <- which.max(dat$variable) # 提取最大值点的坐标 max_point <- coordinates(dat)[max_idx, ]
2. 批量计算所有点到最大值点的欧氏距离
直接使用sp包内置的spDistsN1函数即可实现,设置longlat = FALSE即可计算平面欧氏距离,符合你室内点位无CRS的需求:
library(sp) # 计算距离并写入空间对象的属性表 dat$dist_to_max <- spDistsN1(dat, max_point, longlat = FALSE)
执行后你可以通过dat@data查看新增的距离列。
3. 拟合距离与variable的线性关系
直接调用lm()即可:
# 拟合线性模型 lm_fit <- lm(variable ~ dist_to_max, data = dat) # 查看拟合结果 summary(lm_fit)
4. base绘图输出结果
# 绘制散点图 plot( x = dat$dist_to_max, y = dat$variable, xlab = "到最高值点的欧氏距离", ylab = "variable取值", pch = 16, col = "steelblue", main = "variable与距离的线性关系" ) # 添加拟合线 abline(lm_fit, col = "darkred", lwd = 2) # 可选:添加拟合公式与R²标注 legend( "topright", legend = c( paste0("拟合线:y = ", round(coef(lm_fit)[2], 2), "x + ", round(coef(lm_fit)[1], 2)), paste0("R² = ", round(summary(lm_fit)$r.squared, 3)) ), lty = c(1, NA), col = c("darkred", NA), bty = "n" )
内容的提问来源于stack exchange,提问作者kpm
相关产品推荐
相关产品推荐

