gbt
gbt

Reputation: 809

How to find y value in line-and-dots plot?

I have this line-and-dots plot:

#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);

now, I would like to find the y coordinate of the intersection point between the green and the red lines.

Can I achieve the goal without the need of a regression line? Is there a simple way of getting the coordinates of that unknown point?

Upvotes: 1

Views: 384

Answers (2)

John Coleman
John Coleman

Reputation: 52008

You can use approxfun to do the interpolation:

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

Alternatively, just use approx:

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

$y
[1] 0.3924427

Upvotes: 3

StupidWolf
StupidWolf

Reputation: 46958

Quick fix like @JohnColeman said:

# 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

So we try it on 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);
abline(h=ycut, col="lightblue", lwd=3, lty=1);

enter image description here

Upvotes: 1

Related Questions