R在两条线的交点处绘制一条线

R plotting a line at the intersection of two lines

我有这个绘制两条相交线的简单代码:

x <- c(1,2,3,4,5,6)
y2 <- c(6,5,4,3,2,1)
y1 <- c(1,2,3,4,5,6)
plot(x, y1)
plot(x, y1, type="o", col="blue", pch="o", lty=1)
points(x, y2, col="red", pch="*")
lines(x, y2, col="red", lty=1)

然后我用locator()函数手动找到两条线的交点位置,用交点的坐标用text()函数在交点处画一个label,画一条竖线与 abline() 函数的交点位置的直线。

p <- locator()
text(p$x, p$y+0.4, labels="S")
abline(v=p$x, lty=3)

但是,这里我 运行 遇到了一个问题,因为我希望交叉点位置的垂直线会在交叉点处停止(而不是沿着整个 y 轴)。

有人可以提示我如何操作吗?

你可以用segments在两个x,y点之间画一条线段,所以你可以这样做:

p <- locator()
text(p$x, p$y + 0.4, labels = "S")
segments(p$x, 0, p$x, p$y, lty = 3)

另请注意,如果您的线总是像这样笔直,您可以通过算法找到交点,这比使用 locator():

更准确且可重现
dx  <- tail(x, 1) - head(x, 1)
dy1 <- tail(y1, 1) - head(y1, 1)
dy2 <- tail(y2, 1) - head(y2, 1)
grad1 <- dy1/dx
grad2 <- dy2/dx
c1 <- y1[1] - grad1 * x[1]
c2 <- y2[1] - grad2 * x[1]
xi <- (c2 - c1)/(grad1 - grad2)
yi <- grad1 * xi + c1
segments(xi, 0, xi, yi, lty = 3)
text(xi, yi + 0.4, labels = "S")