如何在点线图中找到y值?

时间:2019-11-18 11:21:40

标签: r

我有这个点状图:

#generate fake data
xLab <- seq(0, 50, by=5);
yLab <- c(0, sort(runif(10, 0, 1)));

#this value is fixed
fixedVal <- 27.3

#new window
dev.new();

#generate the plot
paste0(plot(xLab, yLab, col=rgb(50/255, 205/255, 50/255, 1), type="o", lwd=3, 
    main="a line-and-dots plot", xlab="some values", ylab="a percentage",
    pch=20, xlim=c(0, 50), ylim=c(0, 1), xaxt="n", cex.lab=1.5, cex.axis=1.5, 
    cex.main=1.5, cex.sub=1.5));

#set axis
axis(side = 1, at=c(seq(min(xLab), max(xLab), by=5)))

#plot line
abline(v=fixedVal, col="firebrick", lwd=3, lty=1);

现在,我想找到绿线和红线之间的交点的y坐标。

我是否可以实现目标而无需回归线?是否有一种简单的方法来获取该未知点的坐标?

2 个答案:

答案 0 :(得分:3)

您可以使用approxfun进行插值:

> approxfun(xLab,yLab)(fixedVal)
[1] 0.3924427

或者,只需使用approx

> approx(xLab,yLab,fixedVal)
$x
[1] 27.3

$y
[1] 0.3924427

答案 1 :(得分:1)

@JohnColeman这样的快速修复方法:

# find the two points flanking your value
idx <- findInterval(fixedVal,xLab)
# calculate the deltas
y_delta <- diff(yLab[idx:(idx+1)])
x_delta <- diff(xLab[idx:(idx+1)])

# interpolate... 
ycut = (y_delta/x_delta) * (fixedVal-xLab[idx]) + yLab[idx]
ycut
[1] 0.4046399

所以我们在情节上尝试一下。

paste0(plot(xLab, yLab, col=rgb(50/255, 205/255, 50/255, 1), type="o", lwd=3, 
    main="a line-and-dots plot", xlab="some values", ylab="a percentage",
    pch=20, xlim=c(0, 50), ylim=c(0, 1), xaxt="n", cex.lab=1.5, cex.axis=1.5, 
    cex.main=1.5, cex.sub=1.5));

#set axis
axis(side = 1, at=c(seq(min(xLab), max(xLab), by=5)))

#plot line
abline(v=fixedVal, col="firebrick", lwd=3, lty=1);
abline(h=ycut, col="lightblue", lwd=3, lty=1);

enter image description here