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