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


R grid.reorder 对 gTree 的子级重新排序


R语言 grid.reorder 位于 grid 包(package)。

说明

更改 gTree 子树的绘制顺序。

用法

grid.reorder(gPath, order, back=TRUE, grep=FALSE, redraw=TRUE)
reorderGrob(x, order, back=TRUE)

参数

gPath

指定当前场景中的 gTree 的 gPath 对象。

x

要修改的 gTree 对象。

order

指定 gTree 子级的新绘制顺序的字符向量或数值向量。可能不会引用 gTree 的所有子级(请参阅详细信息)。

back

控制当 order 未指定 gTree 的所有子级时发生的情况(请参阅详细信息)。

grep

gPath 是否应该被视为正则表达式?

redraw

修改后的场景是否需要重新绘制?

细节

在最简单的情况下,order 为 gTree 的所有子级指定新的排序。可以通过名称或现有的数字顺序来指定子项。

如果 order 未指定 gTree 的所有子级,则默认情况下,首先绘制 order 指定的子级,然后绘制所有剩余的子级。如果back=FALSE,则首先绘制order中未指定的子项,然后绘制指定的子项。这样可以轻松指定 send-to-back 或 bring-to-front 重新排序。 order 参数始终按 back-to-front 顺序排列。

无法对网格显示列表(当前场景中的顶级 grobs)进行重新排序,因为显示列表是 grobs 和视口的混合体(因此不清楚重新排序意味着什么,而且很容易结束一个不会绘制的场景)。如果要重新排序网格显示列表,请尝试 grid.grab() 创建一个 gTree,然后重新排序(并重新绘制)该 gTree。

grid.reorder() 因其修改当前场景的副作用而被调用。 reorderGrob() 返回修改后的 gTree。

警告

该函数可能会返回一个不会绘制的 gTree。例如,gTree 有两个子节点 A 和 B(按此顺序),子节点 B 的宽度取决于子节点 A 的宽度(例如,一段文本周围的框)。切换顺序以使 B 在 A 之前绘制将不允许 B 被绘制。如果 grid.reorder() 发生这种情况,则不会执行修改。如果 reorderGrob() 发生这种情况,应该可以简单地恢复原始顺序。

例子

# gTree with two children, "red-rect" and "blue-rect" (in that order)
gt <- gTree(children=gList(
                rectGrob(gp=gpar(col=NA, fill="red"),
                         width=.8, height=.2, name="red-rect"),
                rectGrob(gp=gpar(col=NA, fill="blue"),
                         width=.2, height=.8, name="blue-rect")),
            name="gt")
grid.newpage()
grid.draw(gt)
# Spec entire order as numeric (blue-rect, red-rect)
grid.reorder("gt", 2:1)
# Spec entire order as character
grid.reorder("gt", c("red-rect", "blue-rect"))
# Only spec the one I want behind as character
grid.reorder("gt", "blue-rect")
# Only spec the one I want in front as character
grid.reorder("gt", "blue-rect", back=FALSE)

作者

Paul Murrell

相关用法


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