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


R Working 維護和導航網格視口樹


R語言 Working 位於 grid 包(package)。

說明

網格維護著視口樹——嵌套的繪圖上下文。

這些函數提供了添加或刪除視口以及在樹中的視口之間導航的方法。

用法

pushViewport(..., recording=TRUE)
popViewport(n = 1, recording=TRUE)
downViewport(name, strict=FALSE, recording=TRUE)
seekViewport(name, recording=TRUE)
upViewport(n = 1, recording=TRUE)

參數

...

"viewport" 的一個或多個對象。

n

一個整數值,指示要彈出或向上導航的視口數量。特殊值 0 表示將視口彈出或導航到根視口。

name

用於標識樹中視口的字符值。

strict

一個布爾值,指示 vpPath 是否必須完全匹配。

recording

一個邏輯值,指示視口操作是否應記錄在網格顯示列表上。

細節

viewport() 函數創建的對象隻是繪圖上下文的說明。視口對象必須先被推送到視口樹上,然後才能對繪圖產生任何影響。

視口樹始終有一個根視口(由係統創建),它對應於整個設備(和默認圖形參數設置)。可以使用 pushViewport() 將視口添加到樹中,並使用 popViewport() 從樹中刪除視口。

當前隻有一個視口,即視口樹中的當前位置。所有繪圖和視口操作都是相對於當前視口的。當視口被推送時,它將成為當前視口。當彈出視口時,父視口將成為當前視口。使用 upViewport 導航到當前視口的父視口,而不從視口樹中刪除當前視口。使用 downViewport 導航到視口樹中更下方的視口,使用 seekViewport 導航到樹中其他任何位置的視口。

如果推送視口並且它與樹中同一級別的視口具有相同的name,則它將替換樹中的現有視口。

downViewport 返回其關閉的視口數量。

這對於通過執行 depth <- downViewport() 然後 upViewport(depth) 之類的操作返回起點很有用。

例子

# push the same viewport several times
grid.newpage()
vp <- viewport(width=0.5, height=0.5)
pushViewport(vp)
grid.rect(gp=gpar(col="blue"))
grid.text("Quarter of the device",
  y=unit(1, "npc") - unit(1, "lines"), gp=gpar(col="blue"))
pushViewport(vp)
grid.rect(gp=gpar(col="red"))
grid.text("Quarter of the parent viewport",
  y=unit(1, "npc") - unit(1, "lines"), gp=gpar(col="red"))
popViewport(2)
# push several viewports then navigate amongst them
grid.newpage()
grid.rect(gp=gpar(col="grey"))
grid.text("Top-level viewport",
  y=unit(1, "npc") - unit(1, "lines"), gp=gpar(col="grey"))
if (interactive()) Sys.sleep(1.0)
pushViewport(viewport(width=0.8, height=0.7, name="A"))
grid.rect(gp=gpar(col="blue"))
grid.text("1. Push Viewport A",
  y=unit(1, "npc") - unit(1, "lines"), gp=gpar(col="blue"))
if (interactive()) Sys.sleep(1.0)
pushViewport(viewport(x=0.1, width=0.3, height=0.6,
  just="left", name="B"))
grid.rect(gp=gpar(col="red"))
grid.text("2. Push Viewport B (in A)",
  y=unit(1, "npc") - unit(1, "lines"), gp=gpar(col="red"))
if (interactive()) Sys.sleep(1.0)
upViewport(1)
grid.text("3. Up from B to A",
  y=unit(1, "npc") - unit(2, "lines"), gp=gpar(col="blue"))
if (interactive()) Sys.sleep(1.0)
pushViewport(viewport(x=0.5, width=0.4, height=0.8,
  just="left", name="C"))
grid.rect(gp=gpar(col="green"))
grid.text("4. Push Viewport C (in A)",
  y=unit(1, "npc") - unit(1, "lines"), gp=gpar(col="green"))
if (interactive()) Sys.sleep(1.0)
pushViewport(viewport(width=0.8, height=0.6, name="D"))
grid.rect()
grid.text("5. Push Viewport D (in C)",
  y=unit(1, "npc") - unit(1, "lines"))
if (interactive()) Sys.sleep(1.0)
upViewport(0)
grid.text("6. Up from D to top-level",
  y=unit(1, "npc") - unit(2, "lines"), gp=gpar(col="grey"))
if (interactive()) Sys.sleep(1.0)
downViewport("D")
grid.text("7. Down from top-level to D",
  y=unit(1, "npc") - unit(2, "lines"))
if (interactive()) Sys.sleep(1.0)
seekViewport("B")
grid.text("8. Seek from D to B",
  y=unit(1, "npc") - unit(2, "lines"), gp=gpar(col="red"))
pushViewport(viewport(width=0.9, height=0.5, name="A"))
grid.rect()
grid.text("9. Push Viewport A (in B)",
  y=unit(1, "npc") - unit(1, "lines"))
if (interactive()) Sys.sleep(1.0)
seekViewport("A")
grid.text("10. Seek from B to A (in ROOT)",
  y=unit(1, "npc") - unit(3, "lines"), gp=gpar(col="blue"))
if (interactive()) Sys.sleep(1.0)
seekViewport(vpPath("B", "A"))
grid.text("11. Seek from\nA (in ROOT)\nto A (in B)")
popViewport(0)

作者

Paul Murrell

也可以看看

viewportvpPath

相關用法


注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Maintaining and Navigating the Grid Viewport Tree。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。