线切割曲线的x轴坐标

时间:2017-11-10 20:59:04

标签: r plot coordinates

我有一张如下图所示的图表。如何在x轴上找到水平灰线切割曲线的坐标?

enter image description here

下面是我用来生成x,y值的玩具数据集

df <- structure(list(x = c(0, -1, -2, -3, -4, -5, -6, -7, -8), 
    y = c(-5.22672371336103, -2.04798328990208, 
    -0.998312848674327, -1.13656559451279, -1.80175393429754, 
    -2.67597356058193, -3.62933726371666, -4.61213085819315, 
    -5.60579419730348)), .Names = c("x", "y"
), row.names = c(NA, -9L), class = "data.frame")

plot(df$x, df$y, asp = 1)
abline(h=-1.92,  col = "gray60")
lines(df$x, df$y)

2 个答案:

答案 0 :(得分:2)

我确信有更聪明的方法可以做到这一点,但这是一种使用样条和蛮力的方法。

spl <- splinefun(df)
s <- seq(min(df$x), max(df$x), by=5e-3)
est <- spl(s)

xs <- s[diff(sign(diff(c(0, abs(-1.92 - est))))) > 0]

plot(df$x, df$y, asp=1)
abline(h=-1.92,  col = "gray60")
lines(s, est)
abline(v=xs, col="blue")

enter image description here

答案 1 :(得分:2)

这是另一种解决方案。

让我先分别定义x和y向量。

h

不是关注两条曲线之间的交点,为了简化,我要做的是取代/移动曲线y<-y+1.92 单位。

fit4 <- lm(y~poly(x,4,raw=TRUE))
summary(fit4)

Coefficients:
                          Estimate Std. Error t value Pr(>|t|)    
(Intercept)             -3.2879360  0.0525516  -62.57 3.91e-07 ***
poly(x, 4, raw = TRUE)1 -4.4218115  0.1044875  -42.32 1.86e-06 ***
poly(x, 4, raw = TRUE)2 -1.4833140  0.0583804  -25.41 1.42e-05 ***
poly(x, 4, raw = TRUE)3 -0.1799201  0.0112986  -15.92 9.09e-05 ***
poly(x, 4, raw = TRUE)4 -0.0080516  0.0007005  -11.49 0.000327 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.05373 on 4 degrees of freedom
Multiple R-squared:  0.9995,    Adjusted R-squared:  0.9991 
F-statistic:  2130 on 4 and 4 DF,  p-value: 6.605e-07

现在我的问题更简单:计算曲线的根。

我适合4度多项式(这有点随机,我不得不承认)。

coef<-fit4$coefficients
polyroot(coef)

正如你所看到的,我的R平方非常好......所以足够

现在,我得到系数并得到我的多项式的根。

{{1}}

-1.094和-4.136。