【问题标题】:Determine which points lay outside an irregularly-shaped data footprint in R?确定哪些点位于 R 中不规则形状的数据足迹之外?
【发布时间】:2017-01-27 13:54:54
【问题描述】:

我在一个“足迹”形状非常不规则的区域中有一系列点:

我想确定足迹顶点内的所有坐标。最终目标是确定哪些数据点位于此足迹之外。

有没有人有有效的方法来做这件事??


我最好的解决方法是根据绿色区域的顶点绘制一个多边形,然后使用所述多边形的坐标来确定“离群点”(不过,我还不确定该怎么做——一步一次!)。

但是,当我尝试创建convex hull 时,由于我的绿色空间的不规则形状,它显然会产生问题。 [有人知道创建CONCAVE船体的方法吗?]

或者,有没有办法使用“单击图形”类型的方法手动绘制多边形?


...同样,如果您对我的问题有比使用多边形更好的解决方案,请务必提出该解决方案!

【问题讨论】:

  • 我对您的问题的解释:找到所有落在绿点区域“内部”的黑点。一个可能的解决方案是将绿点区域分成 3 个独立的凸面区域(或多或少的矩形)。在 x 轴处切割 ~650 和 ~1150。第一次切割可以一直进行,而第二次切割将在 y=200 附近停止。现在,为这 3 个区域中的每一个区域使用类似 chull 或相关函数。
  • @lmo 是的,最初我的目标是确定绿点区域内的坐标,但只有这样我才能确定黑点何时落在该区域超出
  • alphahull::ahull() 可以在这里帮忙。
  • 看看alphahull package。有关示例应用程序,请参阅 Barry Rowlingson 的 RPubs 文档 here
  • 如果你想走手动路线,最简单的方法是?locator ...只需要base R.

标签: r polygon scatter-plot footprint concave-hull


【解决方案1】:

或者,有没有一种方法可以使用“点击”手动绘制多边形 图的类型方法?

这是一个想法。首先,一些随机点:

library(manipulate)
library(sp)
set.seed(1)
par(pch = 19, cex=.5)
x <- runif(1000)
y <- runif(1000)

现在,绘制并捕获多边形:

coords <- data.frame()
manipulate({
  plot(y~x)
  res <- manipulatorMouseClick()
  coords <<- rbind(coords, data.frame(x=res$userX, y=res$userY))
  if (length(coords)) lines(coords)
})

并确定哪些点在其内部/外部(参见?point.in.polygon):

res <- point.in.polygon(x, y, coords$x, coords$y)!=0 

plot(y~x, col = res + 1L)
lines(coords)

【讨论】:

  • 有趣,“操作包必须在 RStudio 中运行。”是时候下载 RStudio 了:p.
  • 嗯.. 好问题 :-D 我只是让它在后台运行(您可以在控制台或源窗口中继续您的工作)。我想如果一切都失败了,你可以从 RStudio 的 Plots 菜单中选择 Remove Plot...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-02
  • 2021-07-07
  • 1970-01-01
  • 2012-01-14
相关资源
最近更新 更多