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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。