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


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