如何估算R中曲线的点坐标?

时间:2015-10-14 23:42:41

标签: r coordinates lines points

假设我有数据:

x <- c(1900,1930,1944,1950,1970,1980,1983,1984)
y <- c(100,300,500,1500,2500,3500,4330,6703)

然后我绘制这些数据并在我已知的x和y坐标之间添加一个折线图:

plot(x,y)
lines(x,y)

有没有办法预测图表线上未知点的坐标?

2 个答案:

答案 0 :(得分:3)

您可以使用approxfun

f <- approxfun(x, y=y)

f(seq(1900, 2000, length.out = 10))
# [1]  100.0000  174.0741  248.1481  347.6190  574.0741 1777.7778 2333.3333
# [8] 3277.7778        NA        NA

注意NA,当序列超出插值点范围时(左右选项近似)。

答案 1 :(得分:0)

您可以手动计算每条线的斜率。

一条线的等式由

给出
y − y1 = grad*(x − x1)

其中grad的计算方法是y的变化除以x的变化

我们可以通过使用图中每一行的两个点来为每条线生成方程。

f2 <- function(xnew, X=x, Y=y) {
             id0 <- findInterval(xnew, X, rightmost=T)
             id1 <- id0 + 1
             grad <- (Y[id1] - Y[id0]) / (X[id1] - X[id0]) 
             Y[id0] + grad* (xnew - X[id0])
 }

 f2(x)
#[1]  100  300  500 1500 2500 3500 4330 6703

f <- approxfun(x, y=y) # bunks
f(seq(1900, 2000, length.out = 10))
# [1]  100.0000  174.0741  248.1481  347.6190  574.0741 1777.7778 2333.3333 3277.7778        NA        NA
f2(seq(1900, 2000, length.out = 10))
# [1]  100.0000  174.0741  248.1481  347.6190  574.0741 1777.7778 2333.3333 3277.7778        NA        NA

如果您想使用最终斜率进行推断,可以通过添加来实现 all.in=TRUE的{​​{1}}参数。

话虽如此,findInterval做得更好&amp;容易!