identify reads the position of the graphics pointer when the
(first) mouse button is pressed. It then searches the coordinates
given in x and y for the point closest to the pointer.
If this point is close enough to the pointer, its index will be returned as
part of the value of the call.
identify(x, ...)
"identify"(x, y = NULL, labels = seq_along(x), pos = FALSE, n = length(x), plot = TRUE, atpen = FALSE, offset = 0.5, tolerance = 0.25, ...)xy.coords) can be given as x,
and y left missing.as.character, and
recycled if necessary to the length of x. Excess labels will
be discarded, with a warning.pos is TRUE, a component is added to the
return value which indicates where text was plotted relative to each
identified point: see Value.plot is TRUE, the labels are
printed near the points and if FALSE they are omitted.TRUE and plot = TRUE, the
lower-left corners of the labels are plotted at the points clicked
rather than relative to the points.atpen = TRUE.par such as
cex, col and font.pos is FALSE, an integer vector containing the
indices of the identified points, in the order they were identified.If pos is TRUE, a list containing a component
ind, indicating which points were identified and a component
pos, indicating where the labels were placed relative to the
identified points (1=below, 2=left, 3=above, 4=right and 0=no offset,
used if atpen = TRUE).
text if pos is specified there, the difference being
that the position of the pointer relative the identified point
determines pos in identify. For labels placed to the left of a point, the right-hand edge of the
string's box is placed offset units to the left of the point,
and analogously for points to the right. The baseline of the text is
placed below the point so as to approximately centre string vertically.
For labels placed above or below a point, the string is centered
horizontally on the point. For labels placed above, the baseline of
the text is placed offset units above the point, and
for those placed below, the baseline is placed so that the top
of the string's box is approximately offset units below the
point. If you want more precise placement (e.g., centering) use
plot = FALSE and plot via text or
points: see the examples.identify is a generic function, and only the default method is
described here. identify is only supported on screen devices such as
X11, windows and quartz. On other devices the
call will do nothing.
Clicking near (as defined by tolerance) a point adds it to the
list of identified points. Points can be identified only once, and if
the point has already been identified or the click is not
near any of the points a message is printed immediately on
the R console.
If plot is TRUE, the point is labelled with the
corresponding element of labels. If atpen is false (the
default) the labels are placed below, to the left, above or to the
right of the identified point, depending on where the pointer was
relative to the point. If atpen is true, the
labels are placed with the bottom left of the string's box at the
pointer.
unix
For the usual X11 device the identification process is
terminated by pressing any mouse button other than the first.
For the quartz device the process is terminated by
pressing either the pop-up menu equivalent (usually second mouse
button or Ctrl-click) or the ESC key.
windows
The identification process is terminated by clicking the second button
and selecting Stop from the menu, or from the Stop
menu on the graphics window.
On most devices which support identify, successful selection of
a point is indicated by a bell sound unless
options(locatorBell = FALSE) has been set.
If the window is resized or hidden and then exposed before the identification
process has terminated, any labels drawn by identify
will disappear. These will reappear once the identification process has
terminated and the window is resized or hidden and exposed again.
This is because the labels drawn by identify are not
recorded in the device's display list until the identification process has
terminated.
If you interrupt the identify call this leaves the graphics
device in an undefined state, with points labelled but labels not
recorded in the display list. Copying a device in that state
windows
(e.g., saving the plot from the window's menu)
will give unpredictable results.
locator, text. dev.capabilities to see if it is supported.
## A function to use identify to select points, and overplot the
## points with another symbol as they are selected
identifyPch <- function(x, y = NULL, n = length(x), pch = 19, ...)
{
xy <- xy.coords(x, y); x <- xy$x; y <- xy$y
sel <- rep(FALSE, length(x)); res <- integer(0)
while(sum(sel) < n) {
ans <- identify(x[!sel], y[!sel], n = 1, plot = FALSE, ...)
if(!length(ans)) break
ans <- which(!sel)[ans]
points(x[ans], y[ans], pch = pch)
sel[ans] <- TRUE
res <- c(res, ans)
}
res
}
Run the code above in your browser using DataLab