【问题标题】:Subset the data in between two curves [closed]子集两条曲线之间的数据[关闭]
【发布时间】:2020-10-29 19:51:50
【问题描述】:

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

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

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

【问题讨论】:

标签: r dataframe ggplot2 shiny r-plotly


【解决方案1】:

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

【讨论】:

  • 是的,但是我们如何提取这些行之间的数据并删除这些行之外的数据?
  • @Kshitij15571 您需要澄清您的问题。正如彼得所提到的,我们需要一个可重现的数据示例来提供有效的解决方案。请编辑您的问题并添加一些数据。更重要的是,回答这些问题,再次作为对您问题的编辑。你有线条方程吗?如果有,方程是什么?
  • 如果您想删除它们,而不是仅仅在图表中不显示它们,我们可以使用我在上面的回答中提到的相同条件对数据进行子集化。但再次提供解决方案,我们需要一个可重复的数据示例以及我在之前评论中提出的问题的答案。
  • 我尝试对数据集进行子集化,但它不起作用。另外,我对编码很陌生,我不知道如何发布可重现的示例。
  • @Kshitij15571 阅读在 cmets 中与您共享的关于创建可重现示例的链接
猜你喜欢
  • 2023-01-28
  • 1970-01-01
  • 2021-07-05
  • 2019-08-15
  • 2022-10-13
  • 1970-01-01
  • 1970-01-01
  • 2014-06-23
  • 2017-10-12
相关资源
最近更新 更多