221 lines
7.4 KiB
R
221 lines
7.4 KiB
R
|
### R code from vignette source 'grid.Rnw'
|
||
|
|
||
|
###################################################
|
||
|
### code chunk number 1: grid.Rnw:33-39
|
||
|
###################################################
|
||
|
library(grDevices)
|
||
|
library(graphics) # for par
|
||
|
library(stats) # for rnorm
|
||
|
library(grid)
|
||
|
ps.options(pointsize = 12)
|
||
|
options(width = 60)
|
||
|
|
||
|
|
||
|
###################################################
|
||
|
### code chunk number 2: grid.Rnw:81-82 (eval = FALSE)
|
||
|
###################################################
|
||
|
## viewport(x = 0.5, y = 0.5, width = 0.5, height = 0.25, angle=45)
|
||
|
|
||
|
|
||
|
###################################################
|
||
|
### code chunk number 3: viewport
|
||
|
###################################################
|
||
|
grid.show.viewport(viewport(x = 0.5, y = 0.5, width = 0.5, height = 0.25,
|
||
|
angle = 45))
|
||
|
|
||
|
|
||
|
###################################################
|
||
|
### code chunk number 4: pushviewports
|
||
|
###################################################
|
||
|
grid.rect(gp = gpar(lty = "dashed"))
|
||
|
vp1 <- viewport(x = 0, y = 0.5, w = 0.5, h = 0.5,
|
||
|
just = c("left", "bottom"), name = "vp1")
|
||
|
vp2 <- viewport(x = 0.5, y = 0, w = 0.5, h = 0.5,
|
||
|
just = c("left", "bottom"))
|
||
|
pushViewport(vp1)
|
||
|
grid.rect(gp = gpar(col = "grey"))
|
||
|
grid.text("Some drawing in graphics region 1", y = 0.8)
|
||
|
upViewport()
|
||
|
pushViewport(vp2)
|
||
|
grid.rect(gp = gpar(col = "grey"))
|
||
|
grid.text("Some drawing in graphics region 2", y = 0.8)
|
||
|
upViewport()
|
||
|
downViewport("vp1")
|
||
|
grid.text("MORE drawing in graphics region 1", y = 0.2)
|
||
|
popViewport()
|
||
|
|
||
|
|
||
|
###################################################
|
||
|
### code chunk number 5: vpstack
|
||
|
###################################################
|
||
|
grid.rect(gp = gpar(lty = "dashed"))
|
||
|
vp <- viewport(width = 0.5, height = 0.5)
|
||
|
pushViewport(vp)
|
||
|
grid.rect(gp = gpar(col = "grey"))
|
||
|
grid.text("quarter of the page", y = 0.85)
|
||
|
pushViewport(vp)
|
||
|
grid.rect()
|
||
|
grid.text("quarter of the\nprevious viewport")
|
||
|
popViewport(2)
|
||
|
|
||
|
|
||
|
###################################################
|
||
|
### code chunk number 6: units
|
||
|
###################################################
|
||
|
unit(1, "npc")
|
||
|
unit(1:3/4, "npc")
|
||
|
unit(1:3/4, "npc")[2]
|
||
|
unit(1:3/4, "npc") + unit(1, "inches")
|
||
|
min(unit(0.5, "npc"), unit(1, "inches"))
|
||
|
unit.c(unit(0.5, "npc"), unit(2, "inches") + unit(1:3/4, "npc"),
|
||
|
unit(1, "strwidth", "hi there"))
|
||
|
|
||
|
|
||
|
###################################################
|
||
|
### code chunk number 7: vpcoords
|
||
|
###################################################
|
||
|
pushViewport(viewport(y = unit(3, "lines"), width = 0.9, height = 0.8,
|
||
|
just = "bottom", xscale = c(0, 100)))
|
||
|
grid.rect(gp = gpar(col = "grey"))
|
||
|
grid.xaxis()
|
||
|
pushViewport(viewport(x = unit(60, "native"), y = unit(0.5, "npc"),
|
||
|
width = unit(1, "strwidth", "coordinates for everyone"),
|
||
|
height = unit(3, "inches")))
|
||
|
grid.rect()
|
||
|
grid.text("coordinates for everyone")
|
||
|
popViewport(2)
|
||
|
|
||
|
|
||
|
###################################################
|
||
|
### code chunk number 8: vplayout
|
||
|
###################################################
|
||
|
pushViewport(viewport(layout = grid.layout(4, 5)))
|
||
|
grid.rect(gp = gpar(col = "grey"))
|
||
|
grid.segments(c(1:4/5, rep(0, 3)), c(rep(0, 4), 1:3/4),
|
||
|
c(1:4/5, rep(1, 3)), c(rep(1, 4), 1:3/4),
|
||
|
gp = gpar(col = "grey"))
|
||
|
pushViewport(viewport(layout.pos.col = 2:3, layout.pos.row = 3))
|
||
|
grid.rect(gp = gpar(lwd = 3))
|
||
|
popViewport(2)
|
||
|
|
||
|
|
||
|
###################################################
|
||
|
### code chunk number 9: layoutcomplex
|
||
|
###################################################
|
||
|
grid.show.layout(grid.layout(4, 4, widths = unit(c(3, 1, 1, 1),
|
||
|
c("lines", "null", "null", "cm")),
|
||
|
heights = c(1, 1, 2, 3),
|
||
|
c("cm", "null", "null", "lines")))
|
||
|
|
||
|
|
||
|
###################################################
|
||
|
### code chunk number 10: gpar
|
||
|
###################################################
|
||
|
pushViewport(viewport(gp = gpar(fill = "grey", fontface = "italic")))
|
||
|
grid.rect()
|
||
|
grid.rect(width = 0.8, height = 0.6, gp = gpar(fill = "white"))
|
||
|
grid.text(paste("This text and the inner rectangle",
|
||
|
"have specified their own gpar settings", sep = "\n"),
|
||
|
y = 0.75, gp = gpar(fontface = "plain"))
|
||
|
grid.text(paste("This text and the outer rectangle",
|
||
|
"accept the gpar settings of the viewport", sep = "\n"),
|
||
|
y = 0.25)
|
||
|
popViewport()
|
||
|
|
||
|
|
||
|
###################################################
|
||
|
### code chunk number 11: simpleplot
|
||
|
###################################################
|
||
|
grid.rect(gp = gpar(lty = "dashed"))
|
||
|
x <- y <- 1:10
|
||
|
pushViewport(plotViewport(c(5.1, 4.1, 4.1, 2.1)))
|
||
|
pushViewport(dataViewport(x, y))
|
||
|
grid.rect()
|
||
|
grid.xaxis()
|
||
|
grid.yaxis()
|
||
|
grid.points(x, y)
|
||
|
grid.text("1:10", x = unit(-3, "lines"), rot = 90)
|
||
|
popViewport(2)
|
||
|
|
||
|
|
||
|
###################################################
|
||
|
### code chunk number 12: bpdata
|
||
|
###################################################
|
||
|
barData <- matrix(sample(1:4, 16, replace = TRUE), ncol = 4)
|
||
|
|
||
|
|
||
|
###################################################
|
||
|
### code chunk number 13: barconstraint
|
||
|
###################################################
|
||
|
boxColours <- 1:4
|
||
|
|
||
|
|
||
|
###################################################
|
||
|
### code chunk number 14: bpfun
|
||
|
###################################################
|
||
|
bp <- function(barData) {
|
||
|
nbars <- dim(barData)[2]
|
||
|
nmeasures <- dim(barData)[1]
|
||
|
barTotals <- rbind(rep(0, nbars), apply(barData, 2, cumsum))
|
||
|
barYscale <- c(0, max(barTotals)*1.05)
|
||
|
pushViewport(plotViewport(c(5, 4, 4, 1),
|
||
|
yscale = barYscale,
|
||
|
layout = grid.layout(1, nbars)))
|
||
|
grid.rect()
|
||
|
grid.yaxis()
|
||
|
for (i in 1:nbars) {
|
||
|
pushViewport(viewport(layout.pos.col = i, yscale = barYscale))
|
||
|
grid.rect(x = rep(0.5, nmeasures),
|
||
|
y = unit(barTotals[1:nmeasures, i], "native"),
|
||
|
height = unit(diff(barTotals[,i]), "native"),
|
||
|
width = 0.8, just = "bottom", gp = gpar(fill = boxColours))
|
||
|
popViewport()
|
||
|
}
|
||
|
popViewport()
|
||
|
}
|
||
|
|
||
|
|
||
|
###################################################
|
||
|
### code chunk number 15: legendlabels
|
||
|
###################################################
|
||
|
legLabels <- c("Group A", "Group B", "Group C", "Something Longer")
|
||
|
boxSize <- unit(0.5, "inches")
|
||
|
|
||
|
|
||
|
###################################################
|
||
|
### code chunk number 16: legfun
|
||
|
###################################################
|
||
|
leg <- function(legLabels) {
|
||
|
nlabels <- length(legLabels)
|
||
|
pushViewport(viewport(layout = grid.layout(nlabels, 1)))
|
||
|
for (i in 1:nlabels) {
|
||
|
pushViewport(viewport(layout.pos.row = i))
|
||
|
grid.rect(width = boxSize, height = boxSize, just = "bottom",
|
||
|
gp = gpar(fill = boxColours[i]))
|
||
|
grid.text(legLabels[i], y = unit(0.5, "npc") - unit(1, "lines"))
|
||
|
popViewport()
|
||
|
}
|
||
|
popViewport()
|
||
|
}
|
||
|
|
||
|
|
||
|
###################################################
|
||
|
### code chunk number 17: barplot
|
||
|
###################################################
|
||
|
grid.rect(gp = gpar(lty = "dashed"))
|
||
|
legend.width <- max(unit(rep(1, length(legLabels)),
|
||
|
"strwidth", as.list(legLabels)) +
|
||
|
unit(2, "lines"),
|
||
|
unit(0.5, "inches") + unit(2, "lines"))
|
||
|
pushViewport(viewport(layout = grid.layout(1, 2,
|
||
|
widths = unit.c(unit(1,"null"), legend.width))))
|
||
|
pushViewport(viewport(layout.pos.col = 1))
|
||
|
bp(barData)
|
||
|
popViewport()
|
||
|
pushViewport(viewport(layout.pos.col = 2))
|
||
|
pushViewport(plotViewport(c(5, 0, 4, 0)))
|
||
|
leg(legLabels)
|
||
|
popViewport(3)
|
||
|
|
||
|
|