2016-09-19 4 views
4

J'ai une série de points dans une zone dont la forme « empreinte » est très irrégulière:Déterminer quels points se trouvent à l'extérieur d'une empreinte de données de forme irrégulière dans R?

LE82

J'aimerais déterminer toutes les coordonnées à l'intérieur des sommets de l'empreinte. L'objectif final est de déterminer quels points de données se trouvent en dehors de cette empreinte.

Est-ce que quelqu'un a un moyen efficace de s'y prendre?


Ma meilleure idée d'aborder c'est de dessiner un polygone basé sur les sommets de la zone verte, puis utiliser a indiqué que les coordonnées de polygones pour déterminer les points « aberrantes » (bien que, je ne sais pas comment faire encore -- Un pas après l'autre!).

Cependant, lorsque j'essaie de créer un convex hull, cela crée évidemment des problèmes à cause de la forme irrégulière de mon espace vert. [Tout le monde sait d'une manière de créer CONCAVES coques?]

Sinon, est-il un moyen de dessiner des polygones manuellement à l'aide d'une méthode de type «cliquez sur le graphique? ... Encore une fois, si vous avez une meilleure solution à mon problème que l'utilisation de polygones, s'il vous plaît suggérer cette solution!

+0

Mon interprétation de votre question: trouvez tous les points noirs qui tombent "à l'intérieur" de la zone de point vert. Une solution potentielle à ceci est de casser la zone de point vert en 3 zones convexes séparées (rectangles plus ou moins). Couper à l'axe des x à ~ 650 et ~ 1150. La première coupe peut aller jusqu'au bout, tandis que la seconde s'arrêterait autour de y = 200. Maintenant, utilisez quelque chose comme "chull" ou des fonctions connexes pour chacune des 3 zones. – lmo

+0

@lmo Oui, mon objectif est au départ de déterminer les coordonnées dans la zone du point vert, mais seulement si je peux déterminer quand un point noir tombe * en dehors de cette zone. – theforestecologist

+0

@lmo: J'avais envisagé de diviser la surface en plusieurs zones convexes, mais comme les zones ont des lignes non parallèles aux axes, je devrais déterminer chacun des sommets à la main pour «dessiner» chaque zone. Je pensais que cela prendrait du temps. Connaissez-vous un moyen de le faire rapidement? – theforestecologist

Répondre

2

En variante, il est un moyen pour dessiner des polygones manuellement à l'aide d'une méthode de type «clic le graphique?

Voici une idée. Tout d'abord, quelques points au hasard:

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

Maintenant, dessiner et la capture du polygone:

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

enter image description here

et de déterminer quels points sont à l'intérieur/à l'extérieur de celui-ci (voir ?point.in.polygon):

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

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

enter image description here

+1

Intéressant, "Le paquet manipulate doit être exécuté depuis RStudio." Il est temps de télécharger RStudio: p. – theforestecologist

+0

Comment terminez-vous la session de manipulation? – theforestecologist

+0

uhm .. bonne question: -D je laisse juste être en arrière-plan (vous pouvez continuer votre travail dans la console ou la fenêtre source). Je suppose que si tout échoue, vous pouvez sélectionner _Remove Plot ..._ dans le menu _Plots_ de RStudio. – lukeA