From: Jannis <bt_jannis_at_yahoo.de>

Date: Sat, 05 Mar 2011 19:54:28 +0100

coords.all$x <- na.omit(coords.all$x) coords.all$y <- na.omit(coords.all$y)

R-help_at_r-project.org mailing list

https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code. Received on Sat 05 Mar 2011 - 19:00:19 GMT

Date: Sat, 05 Mar 2011 19:54:28 +0100

On 03/05/2011 07:25 PM, Greg Snow wrote:

> It is not completely clear what you are trying to accomplish. Do you want to draw a shape in the plot then identify all the points in that shape? You could use locator (with type='l') to draw a polygon, then there are functions in add on packages (mostly the spatial ones) that will detect which points are within a polygon that you could use with the raw data and the polygon created.

*>
**> If that is not what you want, then maybe describe your goals in more detail (examples are good if you can give one).
**>
*

Thats exactly what I want. drawing a polygon in a plot and searching for
the points inside the polygon. I managed to create that polygon and to
check which points are inside but only by supplying my function with the
coordinates of the points. Now I was wondering whether it is also
possible to retrieve these coordinates from the plot (similar to
par()$usr and similar...).

ideally it would work as follows:

x<-rnorm(20)

y=rnorm(20)

plot(x,y)

points.in.poly <- identify.poly() #see below
#now click on the plot to identify the points

Right now it only works like

points.in.poly <- identify.poly(x,y)

Anyway, supplying the points is not too complicated, it would just be easier to do without.

identify.poly <- function(x,y,col.points='red') {

require(sp)

exit=FALSE

i=0

coords.all <- list(x=vector(length=100),y=vector(length=100)) coords.all$x[1:100]<-NA coords.all$y[1:100]<-NA while (i<100) { coords.t <- locator(n=1) exit=!point.in.polygon(coords.t$x,coords.t$y, par()$usr[c(1,2,2,1)],par()$usr[c(3,3,4,4)]) if (exit) { break } i=i+1 points(coords.t,col=col.points,pch='+') coords.all$x[i] <- coords.t$x coords.all$y[i] <- coords.t$y if (i>1) points(coords.all$x[(i-1):i],coords.all$y[(i-1):i],lty=2, col=col.points,type='l') } points(coords.all$x[c(i,1)],coords.all$y[c(i,1)],lty=2, col=col.points,type='l')

coords.all$x <- na.omit(coords.all$x) coords.all$y <- na.omit(coords.all$y)

points.inpoly <- point.in.polygon(point.x=x,point.y=y,

pol.x=coords.all$x,pol.y=coords.all$y)

points(x[points.inpoly==1],y[points.inpoly==1],pch=par()$pch,col=col.points)

data.return=list(in.poly=!!points.inpoly,x=x,y=y) }

R-help_at_r-project.org mailing list

https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code. Received on Sat 05 Mar 2011 - 19:00:19 GMT

Archive maintained by Robert King, hosted by
the discipline of
statistics at the
University of Newcastle,
Australia.

Archive generated by hypermail 2.2.0, at Sat 05 Mar 2011 - 19:30:19 GMT.

*
Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help.
Please read the posting
guide before posting to the list.
*