对两条曲线之间的数据进行子集化
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)
我想用黑色曲线过滤蓝色数据点,这样只有剩下的蓝色数据点应该在这两条黑线之间,并且必须删除异常值。
我尝试使用 which
、filter
、Subset
函数。但是,它不起作用,它没有呈现我想要的输出。
最后,我想要那两条黑线之间的散点数据。
我发布了一个解决方案,因为这个问题可能对其他人有帮助。这里的一般想法是点的条件着色。基本上,如果它们落在曲线之间,我们就给它们一种颜色,否则颜色将是 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))
我有一个散点图,我希望能够过滤该散点图的数据。
您在这张图片中看到了四个地块。 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)
我想用黑色曲线过滤蓝色数据点,这样只有剩下的蓝色数据点应该在这两条黑线之间,并且必须删除异常值。
我尝试使用 which
、filter
、Subset
函数。但是,它不起作用,它没有呈现我想要的输出。
最后,我想要那两条黑线之间的散点数据。
我发布了一个解决方案,因为这个问题可能对其他人有帮助。这里的一般想法是点的条件着色。基本上,如果它们落在曲线之间,我们就给它们一种颜色,否则颜色将是 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))