如何估计 R 中沿图形线的点的坐标?
How do I estimate the coordinates of points along a graphed line in R?
假设我有数据:
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)
有没有办法预测图中未知点的坐标?
您可以使用 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,当序列超出插值点范围时(approxfun 有左右选项)。
您可以手动计算每条线的斜率。
直线方程由
给出
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
如果您想使用最终斜率进行推断,可以通过添加
findInterval
.
的 all.in=TRUE
参数
话虽如此,approxfun
做得更好更容易!
假设我有数据:
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)
有没有办法预测图中未知点的坐标?
您可以使用 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,当序列超出插值点范围时(approxfun 有左右选项)。
您可以手动计算每条线的斜率。
直线方程由
给出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
如果您想使用最终斜率进行推断,可以通过添加
findInterval
.
all.in=TRUE
参数
话虽如此,approxfun
做得更好更容易!