当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R identify 识别散点图中的点


R语言 identify 位于 graphics 包(package)。

说明

identify 在按下(第一个)鼠标按钮时读取图形指针的位置。然后,它在 xy 中给出的坐标中搜索最接近指针的点。如果该点距离指针足够近,则其索引将作为调用值的一部分返回。

用法

identify(x, ...)

## Default S3 method:
identify(x, y = NULL, labels = seq_along(x), pos = FALSE,
         n = length(x), plot = TRUE, atpen = FALSE, offset = 0.5,
         tolerance = 0.25, order = FALSE, ...)

参数

x, y

散点图中点的坐标。或者,任何定义坐标的对象(绘图结构、时间序列等:请参阅 xy.coords )都可以指定为 x ,而 y 则缺失。

labels

一个可选的字符向量,为点提供标签。将使用 as.character 进行强制,并在必要时回收到 x 的长度。多余的标签将被丢弃,并发出警告。

pos

如果 posTRUE ,则会在返回值中添加一个组件,该组件指示相对于每个标识点绘制文本的位置:请参阅值。

n

要识别的最大点数。

plot

逻辑:如果 plotTRUE ,则标签打印在点附近,如果 FALSE 则省略标签。

atpen

逻辑:如果 TRUEplot = TRUE ,则标签的左下角绘制在单击的点处,而不是相对于点绘制。

offset

将标签与已识别点分开的距离(以字符宽度为单位)。允许负值。如果 atpen = TRUE 则不使用。

tolerance

指针距离某个点“足够近”的最大距离(以英寸为单位)。

order

如果 orderTRUE ,则会在返回值中添加一个组件,该组件指示识别点的顺序:请参阅值。

...

进一步传递给 par 的参数,例如 cexcolfont

细节

identify是一个通用函数,这里只说明默认方法。

identify 仅在 X11windowsquartz 等屏幕设备上受支持。在其他设备上,该调用不会执行任何操作。

单击附近(定义为tolerance) 一个点将其添加到已识别点的列表中。点只能识别一次,如果该点已经被识别或者单击不在任何点附近,则会立即在屏幕上打印一条消息R安慰。

如果 plotTRUE ,则该点将使用 labels 的相应元素进行标记。如果 atpen 为 false(默认值),则标签将放置在已识别点的下方、左侧、上方或右侧,具体取决于指针相对于该点的位置。如果 atpen 为 true,则标签将放置在字符串框左下角的指针处。

对于常见的 X11 设备,通过按除第一个以外的任何鼠标按钮来终止识别过程。对于quartz 设备,通过按弹出菜单等效项(通常是第二个鼠标按钮或Ctrl 单击)或ESC 键来终止该过程。

在大多数支持 identify 的设备上,除非已设置 options(locatorBell = FALSE),否则会通过铃声指示成功选择点。

如果在识别过程终止之前调整窗口大小或隐藏窗口然后将其暴露,则 identify 绘制的任何标签都将消失。一旦识别过程终止并且窗口大小调整或隐藏并再次暴露,这些将重新出现。这是因为 identify 绘制的标签在识别过程终止之前不会记录在设备的显示列表中。

如果中断 identify 调用,则会使图形设备处于未定义状态,其中标记了点,但标签未记录在显示列表中。在该状态下复制设备将产生不可预测的结果。

如果 posorder 都是 FALSE ,则为包含已识别点索引的整数向量。

如果 posorderTRUE ,则包含组件 ind 的列表,指示识别了哪些点,以及(如果 posTRUE )组件 pos ,指示标签的位置相对于识别点放置(1=下方,2=左,3=上方,4=右,0=无偏移,如果 atpen = TRUE 使用)和(如果 orderTRUE)组件 order ,表示识别点的顺序。

技术细节

如果在那里指定了 pos,则用于放置标签的算法与 text 使用的算法相同,区别在于指针相对于识别点的位置决定了 identify 中的 pos

对于放置在点左侧的标签,字符串框的右侧边放置在该点左侧的 offset 单位,对于右侧的点也类似。文本的基线位于该点下方,以便使字符串垂直居中。对于放置在点上方或下方的标签,字符串以该点水平居中。对于放置在上方的标签,文本的基线放置在该点上方 offset 单位,而对于放置在下方的标签,放置基线以使字符串框的顶部大约位于该点下方 offset 单位。如果您想要更精确的放置(例如居中),请使用 plot = FALSE 并通过 textpoints 进行绘图:请参阅示例。

例子

## 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), plot = FALSE, pch = 19, ...)
{
    xy <- xy.coords(x, y); x <- xy$x; y <- xy$y
    sel <- rep(FALSE, length(x))
    while(sum(sel) < n) {
        ans <- identify(x[!sel], y[!sel], labels = which(!sel), n = 1, plot = plot, ...)
        if(!length(ans)) break
        ans <- which(!sel)[ans]
        points(x[ans], y[ans], pch = pch)
        sel[ans] <- TRUE
    }
    ## return indices of selected points
    which(sel)
}

if(dev.interactive()) { ## use it
  x <- rnorm(50); y <- rnorm(50)
  plot(x,y); identifyPch(x,y) # how fast to get all?
}

参考

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.

也可以看看

locatortext

dev.capabilities看看是否支持。

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Identify Points in a Scatter Plot。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。