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


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