首页 > 解决方案 > 对两条曲线之间的数据进行子集化

问题描述

我有一个散点图,我希望能够过滤该散点图的数据。在此处输入图像描述

您在此图像中看到四个图。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函数。但是,它不起作用,它没有呈现我想要的输出。

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

标签: rdataframeggplot2shinyr-plotly

解决方案


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

在这里,我假设我们有可以在ifelse. 如果不是这样,那么我们需要找到最合适的。您可以在此线程中找到有关将曲线拟合到特定数据的有用答案。

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))


推荐阅读