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)
參數
... |
類 |
n |
一個整數值,指示要彈出或向上導航的視口數量。特殊值 |
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
也可以看看
相關用法
- R grid.curve 在位置之間繪製曲線
- R legendGrob 構建一個圖例 Grob
- R grid.draw 畫一個網格
- R grid.stroke 描邊或填充路徑
- R viewportTransform 定義組轉換
- R grid.raster 渲染光柵對象
- R showGrob 標簽網格塊
- R gridCoords 為網格對象創建坐標集
- R unit.pmin 並行單元最小值和最大值
- R grid.points 繪製數據符號
- R grid.force 強製將一個對象放入其組件中
- R grobCoords 計算 Grob 周長上的點
- R unit.rep 複製單元對象的元素
- R grid.display.list 控製網格顯示列表
- R dataViewport 根據數據創建帶有比例的視口
- R stringWidth 創建說明字符串或數學表達式的寬度和高度的單位
- R grid.show.viewport 繪製網格視口圖
- R validDetails 自定義網格 grob 驗證
- R grid.segments 繪製線段
- R grid.frame 創建用於包裝對象的框架
- R gPath 連接 Grob 名稱
- R calcStringMetric 計算文本的指標信息
- R grid.group 畫一個組
- R editViewport 修改視口
- R showViewport 顯示網格視口
注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Maintaining and Navigating the Grid Viewport Tree。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。