12.3 交互使用图形环境
R 同时提供了允许用户直接用鼠标在一个图上提取和提交信息的函数。其中最为简单的是函数 locator()
:
locator(n, type)
- 等待用户用鼠标左键点击当前图上的特定位置。这个过程直到 n (默认512)个点被选择,或者另外一个鼠标键被点击 了。参数
type
允许在被选择的点上画图并且有高级画图命 令一样的效果;默认情况下不能画图。locator()
以双分量x
和y
的列表形式返回所选中点的位置信息。
locator()
常常没有参数。当我们很难设定一些图形元素(如图例和标签)在图上的放置位置时,交互式选定位置信息可能是一种非常好的办法。例如,在特异点 (outlying point)的旁边标注一些提示信息,我们可以用下面的命令
> text(locator(1), "Outlier", adj=0)
(如果当前设备(如 postscript
)不支持交互式使用,则 locator()
会被自动忽略。)
identify(x, y, labels)
- 允许用户将
labels
定义的标签(在labels
为空时,默认为点的索引值)放置在由x
和y
(利用鼠标左键)决定的点旁边。当鼠标右键被点击时,返回被选择点的索引。
有时候我们想标定一个图上的一些特定点,而不是它们的位置。例如,我们可能期望用户能在图形显示上选择一些有意思的点,然后以某种方式处理。假定有两个数值向量 x
和 y
构成的一系列坐标(x, y),我们可以如下使用函数 identify()
:
> plot(x, y)
> identify(x, y)
函数 identify()
自己不会标识,但允许用户简单的移动鼠标指针和在一个点附近点击鼠标左键。如果有一个点在鼠标指针附近,那么它将会把自己的索引值(也就是在 x/y
向量中的位置)标记在点的旁边。还有一种方案是,你可以通过 identify()
的参数labels
设置其他的文字信息(如样本名字等),并且可以通过参数 plot = FALSE
禁止标记重叠在一起。在这个过程结束时(见上面),identify()
返回所选点的索引值;你可以利用这些索引值提取原始向量 x
和 y
中的点信息。