There are a multitude of ways in which you can divide the plotting area to get multiple plots.

**par(mfrow=c()) **is one of the most popular: it’s symmetric and very easy to use, you just need to specify the number of rows and columns.

data(iris)

attach(iris)

`op <- par(no.readonly = TRUE)`

par(mfrow=c(2,3))

plot(Sepal.Length,Sepal.Width)

plot(Sepal.Length,Petal.Length)

plot(Sepal.Length,Petal.Width)

hist(Sepal.Width)

hist(Petal.Length)

hist(Petal.Width)

par(op)

If what you’re looking for is a bit less regular and symmetrical, **layout matrix** is your friend, and you can control the plotting order of each plotting space through **byrow **(=T by default)

ex1 <- layout(matrix(c(1:2),1,2),widths=c(0.9,0.1),heights=1)

layout.show(ex1)

`ex2 <- layout(matrix(c(1,1,2,3),2,2,byrow=T),widths=c(0.9,0.1),heights=1)`

layout.show(ex2)

layout(matrix(c(2,0,1,3),2,2,byrow=TRUE), widths=c(1,0.3), heights=c(0.3,1), TRUE)

par(mar=c(0,0,0,0),oma=c(0,0,0,0))

plot(Sepal.Length,Sepal.Width, xlab="Sepal Length", ylab="Sepal Width")

hist(Sepal.Length,axes=FALSE, main="")

plot(NULL, type = "n", axes=F,xlim = c(0, max(x$counts)), ylim = c(range(x$breaks)))

rect(0, x$breaks[1:(length(x$breaks) - 1)], x$counts, x$breaks[2:length(x$breaks)])

This kind of graph is actually much simpler to do in ggplot2…

**Layout matrix **also offers much more complicated combinations…

`a <- layout(matrix(c(1,1,2,1,1,3,4,5,6),3,3), widths=c(0.5,0.5,0.4), heights=1)`

layout.show(a)

` `

`ex4 <- layout(matrix(c(1,2,2,3,3,3,4,4,4,4,5,5,6,6,6,7,7,7,7,8),10,2, byrow=F))`

layout.show(ex4)