找到误差线和直线之间的交点

Finding points of intersection between error bars and a line

我有一个数据框,原始数据分为对应于 x 轴和 y 轴的 2 列。我通过 arrows() 函数(只有垂直的)根据标准偏差添加了误差线,我还使用 abline() 函数绘制了一条 45° 线。

df1 <- data.frame(col1= c(5.37, 2.86, 2.72, 4.62, 5.76, 3.07, 1.35, 6.12),
                  col2= c(4.06, 4.50, 3.90, 5.62, 4.65, 6.18, -0.31, 8.42))

plot(df1$col1, df1$col2,
     xlab="x",
     ylab="y",
     pch=19,
     xlim=c(-2,10),
     ylim=c(-2,10),
     col="blue")

abline(0,1,lty=1,lwd=2,col="black") # 45° line

df1_sd <- apply(df1, 2, sd)

# Adding vertical arrows (error bars)
arrows(x0=df1$col1, y0=(df1$col2-df1_sd[[1]]), 
       x1=df1$col1, y1=(df1$col2+df1_sd[[1]]), 
       code=3, col="blue", angle=90, length=0.1)

我的目标是 select 与 45° 线相交的点(来自数据框),同时考虑到误差条。

作为一个例子,我想从我的输出中删除标记为黄色的两个点(因为它们超出了我的容忍范围)。

能否请您指导我如何实现这一目标?

subset(df1, col1 >col2 - df1_sd[1] & col1< col2 + df1_sd[2])
  col1  col2
1 5.37  4.06
2 2.86  4.50
3 2.72  3.90
4 4.62  5.62
5 5.76  4.65
7 1.35 -0.31

请注意,第 6 点和第 8 点已被删除