interaction
位於 lattice
包(package)。 說明
經典的網格範式是一次性繪製整個對象,之後不可能與其交互。然而,通過跟蹤繪製麵板和條帶的網格視口,之後可以返回它們並一次增強它們一個麵板。這些函數提供了方便的接口來幫助實現這一點。請注意,這些仍處於實驗階段,具體細節將來可能會發生變化。
用法
panel.identify(x, y = NULL,
subscripts = seq_along(x),
labels = subscripts,
n = length(x), offset = 0.5,
threshold = 18, ## in points, roughly 0.25 inches
panel.args = trellis.panelArgs(),
...)
panel.identify.qqmath(x, distribution, groups, subscripts, labels,
panel.args = trellis.panelArgs(),
...)
panel.identify.cloud(x, y, z, subscripts,
perspective, distance,
xlim, ylim, zlim,
screen, R.mat, aspect, scales.3d,
...,
panel.3d.identify,
n = length(subscripts),
offset = 0.5,
threshold = 18,
labels = subscripts,
panel.args = trellis.panelArgs())
panel.link.splom(threshold = 18, verbose = getOption("verbose"), ...)
panel.brush.splom(threshold = 18, verbose = getOption("verbose"), ...)
trellis.vpname(name = c("position", "split", "split.location", "toplevel",
"figure", "panel", "strip", "strip.left",
"legend", "legend.region", "main", "sub",
"xlab", "ylab", "xlab.top", "ylab.right", "page"),
column, row,
side = c("left", "top", "right", "bottom", "inside"),
clip.off = FALSE, prefix)
trellis.grobname(name,
type = c("", "panel", "strip", "strip.left",
"key", "colorkey"),
group = 0,
which.given = lattice.getStatus("current.which.given",
prefix = prefix),
which.panel = lattice.getStatus("current.which.panel",
prefix = prefix),
column = lattice.getStatus("current.focus.column",
prefix = prefix),
row = lattice.getStatus("current.focus.row",
prefix = prefix),
prefix = lattice.getStatus("current.prefix"))
trellis.focus(name, column, row, side, clip.off,
highlight = interactive(), ..., prefix,
guess = TRUE, verbose = getOption("verbose"))
trellis.switchFocus(name, side, clip.off, highlight, ..., prefix)
trellis.unfocus()
trellis.panelArgs(x, packet.number)
參數
x , y , z |
定義麵板內容的變量。對於 |
n |
默認情況下要識別的點數(通過右鍵單擊覆蓋) |
subscripts |
與每個點關聯的整數索引的可選向量。請參閱下麵的詳細信息。 |
labels |
與每個點關聯的標簽的可選向量。默認為 |
distribution , groups |
|
offset |
標簽打印在識別點的下方、上方、左側或右側,具體取決於鼠標單擊的相對位置。 |
threshold |
網格 |
panel.args |
包含組件名稱 |
perspective , distance , xlim , ylim , zlim , screen , R.mat , aspect , scales.3d |
傳遞給 |
panel.3d.identify |
數據重新縮放和旋轉計算完成後負責實際交互的函數。默認情況下,使用類似於 |
name |
一個字符串,指示我們正在尋找哪個視口或對象。盡管這些不一定提供對由格子圖創建的所有視口和對象的訪問,但它們涵蓋了end-users可能感興趣的大多數內容。
如果在對 當 |
column , row |
整數,指示應在網格布局中分配焦點的麵板或條帶的位置。行通常是從下往上計算的,除非繪圖是使用 |
guess |
合乎邏輯的。如果 |
side |
字符串,僅與圖例相關(即,當 |
clip.off |
邏輯,是否應關閉剪裁,當 |
type |
指定 grob 是否特定於特定麵板或條帶的字符串。 當 |
group |
一個整數,指定該 grob 是否特定於圖中的特定組。 當 |
which.given , which.panel |
整數,指示正在表示哪個條件變量(在條帶內)以及條件變量的當前級別。 當 |
prefix |
用作標識 用戶通常不需要為此參數提供值,除非與最後繪製的繪圖以外的現有繪圖進行交互。 對於 |
highlight |
邏輯上,是否應突出顯示分配焦點的視口。對於 |
packet.number |
整數,從哪個麵板獲取數據。有關如何計算的詳細信息,請參閱 |
verbose |
是否打印詳細信息 |
... |
對於 |
細節
panel.identify
與identify
類似。調用時,它等待用戶通過鼠標單擊來識別點(在正在繪製的麵板中)。單擊 left-clicks 以外的其他按鈕會終止該過程。盡管可以將其作為麵板函數的一部分進行調用,但更典型的做法是在繪製整個對象後使用它來識別點,在這種情況下,首先需要調用trellis.focus
。
panel.link.splom
旨在與 splom
一起使用,並且需要在調用之前使用 trellis.focus
選擇麵板。單擊一個點會導致該點以及其他成對散點圖中的相應投影突出顯示。 panel.brush.splom
是 panel.link.splom
的(錯誤命名的)別名,保留是為了向後兼容。
panel.identify.qqmath
是一個專門的包裝器,用於與 qqmath
生成的顯示一起使用。 panel.identify.qqmath
是一個專門的包裝器,用於與 cloud
生成的顯示一起使用。除非在可通過 trellis.panelArgs
使用默認麵板函數參數的上下文中(見下文),否則調用它們是不尋常的。
panel.identify
等與 identify
的不同之處在於它如何使用 subscripts
參數。一般來說,當人們識別麵板中的點時,人們希望識別用於生成繪圖的 DataFrame 中的原點,而不是該特定麵板內的原點。此信息可供麵板函數使用,但僅在某些情況下可用。確保 subscripts
可用的一種方法是在高級調用中指定 subscripts = TRUE
,例如 xyplot
。如果 subscripts
未在 panel.identify
調用中顯式指定,但在 panel.args
中可用,則將使用這些值。否則,它們默認為 seq_along(x)
。無論哪種情況,最終返回值都將是標記的下標。
打印(繪製)網格對象的過程會構建一個帶有命名視口的網格布局,然後可以訪問該視口以進一步修改繪圖。雖然隻有直接使用網格函數才能獲得完全的靈活性,但一些網格函數可用於更常見的任務。
trellis.focus
可用於移動到特定麵板或條帶,由其在麵板數組中的位置標識。它還可用於聚焦於與標簽之一或圖例相對應的視口,盡管這種用法不太有用。確切的視口由 name
以及其他參數確定,並非所有參數都與所有名稱相關。請注意,當在一頁上繪製多個對象時,trellis.focus
將始終轉到最後創建的繪圖。為了獲得更大的靈活性,請直接使用網格函數(請參見下麵的注釋)。
成功調用 trellis.focus
後,所需的視口(通常是麵板或條帶區域)將成為 ‘current’ 視口(繪圖區域),然後可以通過調用標準晶格麵板函數和網格函數來增強該視口。
在繪製 "trellis"
對象時而不是在此之前選擇麵板布局是很常見的。有關布局的信息(具體來說,有多少行和列,以及哪個數據包屬於此布局中的哪個位置)會為最後繪製的 "trellis"
對象保留,並可通過 trellis.currentLayout
獲得。
trellis.unfocus
取消焦點,並使頂層視口成為當前視口。
trellis.switchFocus
是一個方便的函數,可以從一個視口切換到另一個視口,同時保留當前的 row
和 column
。盡管行和列僅對麵板和條帶有意義,但即使用戶切換到其他視口(其中行/列不相關)然後再切換返回,它們也會被保留。
一旦麵板或條帶獲得焦點,trellis.panelArgs
可用於檢索該位置的麵板函數可用的參數。在這種情況下,可以不帶參數調用它,如下所示
trellis.panelArgs()
當打印 "trellis"
對象時也允許這種用法,例如在麵板函數或軸函數內(但不在預麵板函數內)。 trellis.panelArgs
還可以從任何 "trellis"
對象檢索麵板參數。請注意,對於這種用法,需要指定 packet.number
(如 xyplot
中的 panel
條目所述)而不是布局中的位置,因為布局僅在打印對象後才確定麵板。
通常不需要直接調用trellis.vpname
和trellis.grobname
。然而,當使用網格函數直接與繪圖交互時,它們可以以可移植的方式生成適當的名稱,如下麵的注釋中所述。
值
panel.identify
返回一個整數向量,其中包含已識別點的下標(請參閱上麵的詳細信息)。 identify
與 pos=TRUE
的等效項尚未實現,但如果需要,可以考慮添加。
trellis.panelArgs
返回可用於所選麵板的麵板函數的參數的命名列表。
trellis.vpname
和trellis.grobname
返回字符串。
僅當 trellis.focus
用於以交互方式聚焦於麵板時,trellis.focus
才具有有意義的返回值,在這種情況下,返回值是一個包含組件 col
和 row
的列表,分別給出所選麵板的列和行位置,除非選擇被取消(通過右鍵單擊),在這種情況下返回值為 NULL
。如果單擊在麵板外部,則 col
和 row
均設置為 0。
注意
用戶可以通過trellis.focus
訪問由lattice創建的視口,如上所述。 grid 包中的函數也可以直接使用。例如,current.vpTree
可用於檢查當前視口樹,seekViewport
或 downViewport
可用於導航到這些視口。對於此類用法,trellis.vpname
和 trellis.grobname
提供了一種可移植的方式來按名稱訪問適當的視口和對象。
例子
## Not run:
xyplot(1:10 ~ 1:10)
trellis.focus("panel", 1, 1)
panel.identify()
## End(Not run)
xyplot(Petal.Length ~ Sepal.Length | Species, iris, layout = c(2, 2))
Sys.sleep(1)
trellis.focus("panel", 1, 1)
do.call("panel.lmline", trellis.panelArgs())
Sys.sleep(0.5)
trellis.unfocus()
trellis.focus("panel", 2, 1)
do.call("panel.lmline", trellis.panelArgs())
Sys.sleep(0.5)
trellis.unfocus()
trellis.focus("panel", 1, 2)
do.call("panel.lmline", trellis.panelArgs())
Sys.sleep(0.5)
trellis.unfocus()
## choosing loess smoothing parameter
p <- xyplot(dist ~ speed, cars)
panel.loessresid <-
function(x = panel.args$x,
y = panel.args$y,
span,
panel.args = trellis.panelArgs())
{
fm <- loess(y ~ x, span = span)
xgrid <- do.breaks(current.panel.limits()$xlim, 50)
ygrid <- predict(fm, newdata = data.frame(x = xgrid))
panel.lines(xgrid, ygrid)
pred <- predict(fm)
## center residuals so that they fall inside panel
resids <- y - pred + mean(y)
fm.resid <- loess.smooth(x, resids, span = span)
##panel.points(x, resids, col = 1, pch = 4)
panel.lines(fm.resid, col = 1)
}
spans <- c(0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8)
update(p, index.cond = list(rep(1, length(spans))))
panel.locs <- trellis.currentLayout()
i <- 1
for (row in 1:nrow(panel.locs))
for (column in 1:ncol(panel.locs))
if (panel.locs[row, column] > 0)
{
trellis.focus("panel", row = row, column = column,
highlight = FALSE)
panel.loessresid(span = spans[i])
grid::grid.text(paste("span = ", spans[i]),
x = 0.25,
y = 0.75,
default.units = "npc")
trellis.unfocus()
i <- i + 1
}
作者
Deepayan Sarkar Deepayan.Sarkar@R-project.org. Felix
Andrews provided initial implementations of
panel.identify.qqmath
and support for focusing on panels
interctively.
也可以看看
identify
, Lattice
, print.trellis
, trellis.currentLayout
, current.vpTree
, viewports
相關用法
- R panel.xyplot xyplot 的默認麵板函數
- R xyplot.ts 時間序列繪圖方法
- R panel.bwplot bwplot 的默認麵板函數
- R panel.loess 添加黃土平滑的麵板函數
- R lset 修改網格設置的接口 - 已失效
- R panel.axis 繪圖軸刻度和標簽的麵板函數
- R Rows 從列表中提取行
- R panel.number 在繪圖期間訪問輔助信息
- R trellis.par.get 網格顯示的圖形參數
- R update.trellis 檢索和更新網格對象
- R barley 明尼蘇達州大麥試驗的產量數據
- R panel.functions 有用的麵板函數組件
- R prepanel.functions Lattice 有用的 Prepanel 函數
- R xyplot 常見的二變量網格圖
- R simpleTheme 生成簡單主題的函數
- R panel.parallel 並行的默認麵板函數
- R print.trellis 繪製和總結網格對象
- R panel.cloud 雲默認麵板函數
- R packet.panel.default 將數據包與麵板關聯
- R levelplot 水平圖和等高線圖
- R trellis.device 初始化網格顯示
- R cloud 3d 散點圖和線框曲麵圖
- R tmd Tukey 均差圖
- R panel.pairs splom 的默認超級麵板函數
- R draw.colorkey 通常為水平圖生成色鍵
注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Functions to Interact with Lattice Plots。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。