當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。