在此论坛中,有很多关于在拟合模型和某些原始数据之间找到交点的问题。但是,就我而言,我处于早期阶段,我仍在评估数据。
首先,我创建了一个数据框,其中包含一个理想值应为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
在我与领域专家的讨论中将非常有价值。
您能指导我如何实现这一目标吗?
这是两个解决方案。第一个使用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()
通过单击相交(并在图表的左上方停止定位器),您将获得相交:
> locator() $x [1] 2.765327 $y [1] 1.002495
然后,您将添加abline(v=2.765327)
。
如果您需要一种更具可编程性的求交点的方法,我们将不得不估计您数据的功能。不幸的是,您尚未向我们提供PROCESS.RATIO,因此我们只能猜测您的数据是什么样子。希望数据是顺利的。这是一个适用于非线性数据的解决方案。如上图所示,R所做的只是在点之间画一条线。因此,我们必须在其中拟合一条曲线。在这里,我用2阶多项式拟合数据。如果数据的线性度较低,则可以尝试增加阶数(此处为2)。如果您的数据是线性的,请使用simple 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)
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")