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


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。