layout
divides the device up into as many rows and columns as
there are in matrix mat
, with the column-widths and the
row-heights specified in the respective arguments.
layout(mat, widths = rep.int(1, ncol(mat)), heights = rep.int(1, nrow(mat)), respect = FALSE)
layout.show(n = 1)
lcm(x)
0
or a positive integer. If $N$ is the largest
positive integer in the matrix, then the integers
${1, \dots, N-1}$ must also appear at least once in the matrix.lcm()
function (see
examples).widths
above.mat
and
each value in the matrix must be either 0
or 1
.layout
returns the number of figures, $N$, see above.
par(mfrow)
,
par(mfcol)
and split.screen
.mat
. The respect
argument controls whether a unit column-width is
the same physical measurement on the device as a unit row-height.
There is a limit (currently 200) for the numbers of rows and columns in the layout, and also for the total number of cells (10007).
layout.show(n)
plots (part of) the current layout, namely the
outlines of the next n
figures.
lcm
is a trivial function, to be used as the interface
for specifying absolute dimensions for the widths
and
heights
arguments of layout()
.
Chapter 5 of Paul Murrell's Ph.D. thesis.
Murrell, P. (2005) R Graphics. Chapman & Hall/CRC Press.
par
with arguments mfrow
, mfcol
, or
mfg
.
def.par <- par(no.readonly = TRUE) # save default, for resetting...
## divide the device into two rows and two columns
## allocate figure 1 all of row 1
## allocate figure 2 the intersection of column 2 and row 2
layout(matrix(c(1,1,0,2), 2, 2, byrow = TRUE))
## show the regions that have been allocated to each plot
layout.show(2)
## divide device into two rows and two columns
## allocate figure 1 and figure 2 as above
## respect relations between widths and heights
nf <- layout(matrix(c(1,1,0,2), 2, 2, byrow = TRUE), respect = TRUE)
layout.show(nf)
## create single figure which is 5cm square
nf <- layout(matrix(1), widths = lcm(5), heights = lcm(5))
layout.show(nf)
##-- Create a scatterplot with marginal histograms -----
x <- pmin(3, pmax(-3, stats::rnorm(50)))
y <- pmin(3, pmax(-3, stats::rnorm(50)))
xhist <- hist(x, breaks = seq(-3,3,0.5), plot = FALSE)
yhist <- hist(y, breaks = seq(-3,3,0.5), plot = FALSE)
top <- max(c(xhist$counts, yhist$counts))
xrange <- c(-3, 3)
yrange <- c(-3, 3)
nf <- layout(matrix(c(2,0,1,3),2,2,byrow = TRUE), c(3,1), c(1,3), TRUE)
layout.show(nf)
par(mar = c(3,3,1,1))
plot(x, y, xlim = xrange, ylim = yrange, xlab = "", ylab = "")
par(mar = c(0,3,1,1))
barplot(xhist$counts, axes = FALSE, ylim = c(0, top), space = 0)
par(mar = c(3,0,1,1))
barplot(yhist$counts, axes = FALSE, xlim = c(0, top), space = 0, horiz = TRUE)
par(def.par) #- reset to default
Run the code above in your browser using DataLab