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


R Grid 创建网格视口


R语言 Grid 位于 grid 包(package)。

说明

这些函数创建视口,视口说明图形设备上的矩形区域并在这些区域内定义许多坐标系。

用法

viewport(x = unit(0.5, "npc"), y = unit(0.5, "npc"),
         width = unit(1, "npc"), height = unit(1, "npc"),
         default.units = "npc", just = "centre",
         gp = gpar(), clip = "inherit", mask = "inherit",
         xscale = c(0, 1), yscale = c(0, 1),
         angle = 0,
         layout = NULL,
         layout.pos.row = NULL, layout.pos.col = NULL,
         name = NULL)
vpList(...)
vpStack(...)
vpTree(parent, children)

参数

x

指定 x-location 的数值向量或单位对象。

y

指定 y-location 的数值向量或单位对象。

width

指定宽度的数值向量或单位对象。

height

指定高度的数值向量或单位对象。

default.units

指示 xywidthheight 仅作为数值向量给出时使用的默认单位的字符串。

just

字符串或数字向量,指定视口相对于其 (x, y) 位置的对齐方式。如果有两个值,则第一个值指定水平对齐方式,第二个值指定垂直对齐方式。可能的字符串值为: "left""right""centre""center""bottom""top" 。对于数值,0 表示左对齐,1 表示右对齐。

gp

"gpar" 的对象,通常是调用函数 gpar 的输出。这本质上是图形参数设置的列表。

clip

"on""inherit""off" 之一,指示是裁剪到此视口的范围、从父视口继承裁剪区域,还是完全关闭裁剪。为了向后兼容,逻辑值 TRUE 对应于 "on" ,而 FALSE 对应于 "inherit"

也可能是说明剪切路径或调用 as.path 的结果的 grob (或 gTree)。

mask

"none" (或 FALSE )或 "inherit" (或 TRUE )或 grob (或 gTree)之一或调用 as.mask 的结果。这指定视口应该没有掩码,或者它应该继承其父级的掩码,或者它应该有自己的掩码,如 grob 所说明的。

xscale

长度为 2 的数字向量,指示 x-scale 上的最小值和最大值。限制可能不相同。

yscale

长度为 2 的数字向量,指示 y-scale 上的最小值和最大值。限制可能不相同。

angle

指示视口旋转角度的数值。正值表示从正 x 轴逆时针旋转的量(以度为单位)。

layout

一个网格布局对象,它将视口分割成子区域。

layout.pos.row

一个数字向量,给出此视口在其父级布局中占用的行数。

layout.pos.col

一个数字向量,给出此视口在其父级布局中占用的列。

name

将视口推送到视口树后,用于唯一标识视口的字符值。

...

任意数量的网格视口对象。

parent

网格视口对象。

children

一个 vpList 对象。

细节

视口的位置和大小相对于该视口的父视口(图形设备或另一个视口)定义的坐标系。通过使用单元对象指定位置和大小,可以以非常灵活的方式指定它们。指定视口的位置时,将 layout.pos.rowlayout.pos.col 指定为 NULL 表示视口忽略其父级的布局并指定其自己的位置和大小(通过其 locn )。如果 layout.pos.rowlayout.pos.col 中只有一个是 NULL ,这意味着占据所有适当的行/列。例如,layout.pos.row = 1layout.pos.col = NULL 表示占据第 1 行的全部。为 layout.pos.rowlayout.pos.col 指定非 NULL 值意味着占据相应行和列的交集。如果为 layout.pos.rowlayout.pos.col 指定长度为 2 的向量,则表示要占用的行或列的范围。例如,layout.pos.row = c(1, 3)layout.pos.col = c(2, 4)表示占据第1、2、3行和第2、3、4列交叉处的单元格。

剪裁仅遵循最新的视口剪裁设置。例如,如果您剪裁到视口 1,然后剪裁到视口 2,则剪裁区域完全由视口 2 决定,视口 1 的大小和形状无关紧要(当然,直到视口 2 弹出)。

如果旋转视口(由于其自身的 angle 设置或因为它位于另一个旋转的视口内),则忽略 clip 标志。

如果clip是一个grob,那么该grob(可能是多个形状)定义了一个剪切路径。函数as.path可用于指定路径的填充规则。

视口名称不必是唯一的。推送时,共享同一父级的视口必须具有唯一的名称,这意味着如果推送与现有视口同名的视口,现有视口将在视口树中被替换。视口名称可以是任何字符串,但网格使用顶级视口的保留名称"ROOT"。此外,当在 downViewportseekViewport 中指定视口名称时,可以提供视口路径,该路径由使用分隔符连接的多个名称组成(当前为 :: )。因此,不建议在视口名称中使用此分隔符。

vpList 中的视口是并行推送的。 vpStack 中的视口按顺序推送。当 vpTree 被推送时,首先推送父级,然后并行推送子级。

viewport 的 R 对象。

例子

# Diagram of a sample viewport
grid.show.viewport(viewport(x=0.6, y=0.6,
                   width=unit(1, "inches"), height=unit(1, "inches")))
# Demonstrate viewport clipping
clip.demo <- function(i, j, clip1, clip2) {
  pushViewport(viewport(layout.pos.col=i,
                         layout.pos.row=j))
  pushViewport(viewport(width=0.6, height=0.6, clip=clip1))
  grid.rect(gp=gpar(fill="white"))
  grid.circle(r=0.55, gp=gpar(col="red", fill="pink"))
  popViewport()
  pushViewport(viewport(width=0.6, height=0.6, clip=clip2))
  grid.polygon(x=c(0.5, 1.1, 0.6, 1.1, 0.5, -0.1, 0.4, -0.1),
               y=c(0.6, 1.1, 0.5, -0.1, 0.4, -0.1, 0.5, 1.1),
               gp=gpar(col="blue", fill="light blue"))
  popViewport(2)
}

grid.newpage()
grid.rect(gp=gpar(fill="grey"))
pushViewport(viewport(layout=grid.layout(2, 2)))
clip.demo(1, 1, FALSE, FALSE)
clip.demo(1, 2, TRUE, FALSE)
clip.demo(2, 1, FALSE, TRUE)
clip.demo(2, 2, TRUE, TRUE)
popViewport()
# Demonstrate turning clipping off
grid.newpage()
pushViewport(viewport(width=.5, height=.5, clip="on"))
grid.rect()
grid.circle(r=.6, gp=gpar(lwd=10))
pushViewport(viewport(clip="inherit"))
grid.circle(r=.6, gp=gpar(lwd=5, col="grey"))
pushViewport(viewport(clip="off"))
grid.circle(r=.6)
popViewport(3)
# Demonstrate vpList, vpStack, and vpTree
grid.newpage()
tree <- vpTree(viewport(width=0.8, height=0.8, name="A"),
               vpList(vpStack(viewport(x=0.1, y=0.1, width=0.5, height=0.5,
                                       just=c("left", "bottom"), name="B"),
                              viewport(x=0.1, y=0.1, width=0.5, height=0.5,
                                       just=c("left", "bottom"), name="C"),
                              viewport(x=0.1, y=0.1, width=0.5, height=0.5,
                                       just=c("left", "bottom"), name="D")),
                      viewport(x=0.5, width=0.4, height=0.9,
                               just="left", name="E")))
pushViewport(tree)
for (i in LETTERS[1:5]) {
  seekViewport(i)
  grid.rect()
  grid.text(current.vpTree(FALSE),
            x=unit(1, "mm"), y=unit(1, "npc") - unit(1, "mm"),
            just=c("left", "top"),
            gp=gpar(fontsize=8))
}

作者

Paul Murrell

也可以看看

GridpushViewport , popViewport , downViewport , seekViewport , upViewport , unit , grid.layout , grid.show.layout

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Create a Grid Viewport。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。