对两条曲线之间的数据进行子集化

Subset the data in between two curves

我有一个散点图,我希望能够过滤该散点图的数据。

您在这张图片中看到了四个地块。 1) 中绿色曲线,2) 上黑色曲线,3) 下黑色曲线,4) 蓝色散点图。

我有所有这些数据框的形式:

蓝色散点图:

df <- mtcars
geom_point(df, aes(x,y), color = 'blue')

绿色曲线:

geom_smooth(formula=y~x, method='loess', color='green3', se=FALSE, size=0.5)

上曲线:

geom_smooth(formula=y+1~x, method='loess', color='gray20', se=FALSE, size=0.5)

下曲线

geom_smooth(formula=y-1~x, method='loess', color='gray20', se=FALSE, size=0.5)

我想用黑色曲线过滤蓝色数据点,这样只有剩下的蓝色数据点应该在这两条黑线之间,并且必须删除异常值。

我尝试使用 whichfilterSubset 函数。但是,它不起作用,它没有呈现我想要的输出。

最后,我想要那两条黑线之间的散点数据。

我发布了一个解决方案,因为这个问题可能对其他人有帮助。这里的一般想法是点的条件着色。基本上,如果它们落在曲线之间,我们就给它们一种颜色,否则颜色将是 NA.

在这里,我假设我们有可以在 ifelse 中使用的曲线函数。如果不是这种情况,那么我们需要找到最合适的。您可以在此线程中找到有关 Fitting a curve to specific data 的有用答案。

x <- (1:10)
y <- x^4

set.seed(123)
xp <- rnorm(100, mean=5.5, sd = 4)
yp <- rnorm(100, mean=5e3, sd=5e3)

plot(x,y, type = "l")
lines(x, y+mean(y), col = "green")
lines(x, y+2*mean(y))
points(x=xp, y=yp, type = "p", col=ifelse(yp < xp^4 + 2*mean(y) & yp > xp^4, "blue", NA))