gpt4 book ai didi

R - 定位两条曲线的交点

转载 作者:行者123 更新时间:2023-12-01 22:26:08 25 4
gpt4 key购买 nike

这个论坛中有很多关于定位拟合模型和一些原始数据之间的交叉点的问题。但是,就我而言,我处于一个早期项目,我仍在评估数据。

首先,我创建了一个数据框,其中包含理想值为 1.0 的比率值。我绘制了数据框,还使用 ​​abline() 函数在 y=1.0 处绘制了一条水平线。这条水平线和比率图在某个点相交。

plot(a$TIME.STAMP, a$PROCESS.RATIO,
xlab='Time (5s)',
ylab='Process ratio',
col='darkolivegreen',
type='l')
abline(h=1.0,col='red')

我的目标是定位交点,比如x,然后在x±k处画两条垂直线,如abline(v=x-k)abline(v=x+k) 其中,k 是一定的公差范围。

在绘图上应用网格并不是一个真正的选择,因为该绘图将成为多面板绘图的一部分。而且,由于比率数据布局非常紧凑,情节不会太可读。最后,x±k 在我与领域专家的讨论中将非常有值(value)。

能否请您指导我如何实现这一目标?

最佳答案

这里有两种解决方案。第一个使用 locator(),如果您没有太多要生成的图表,它将很有用:

x <- 1:5
y <- log(1:5)
df1 <-data.frame(x= 1:5,y=log(1:5))
k <-0.5

plot(df1,type="o",lwd=2)
abline(h=1, col="red")
locator()

enter image description here

通过单击交叉点(并停止图表左上角的定位器),您将得到交叉点:

> locator()
$x
[1] 2.765327
$y
[1] 1.002495

然后您将添加 abline(v=2.765327)

如果您需要一种更加可编程的方式来查找交集,我们将不得不估计您的数据的功能。不幸的是,您没有向我们提供 PROCESS.RATIO,所以我们只能猜测您的数据是什么样的。希望数据顺利。这是一个适用于非线性数据的解决方案。正如您在上一张图表中所见,R 所做的只是在点之间画一条线。所以,我们必须在那里拟合一条曲线。在这里,我用 2 阶多项式拟合数据。如果您的数据线性度较低,您可以尝试增加阶数(此处为 2)。如果您的数据是线性的,请使用简单的 lm

fit <-lm(y~poly(x,2))
newx <-data.frame(x=seq(0,5,0.01))
fitline = predict(fit, newdata=newx)

est <-data.frame(newx,fitline)

plot(df1,type="o",lwd=2)
abline(h=1, col="red")
lines(est, col="blue",lwd=2)

enter image description here使用这条拟合曲线,我们可以找到最接近 y=1 的点。一旦我们有了那个点,我们就可以在交叉点和 +/-k 处绘制垂直线。

cross <-est[which.min(abs(1-est$fitline)),] #find closest to 1

plot(df1,type="o",lwd=2)
abline(h=1)
abline(v=cross[1], col="green")
abline(v=cross[1]-k, col="purple")
abline(v=cross[1]+k, col="purple")

enter image description here

关于R - 定位两条曲线的交点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34248347/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com