Multiple Plot Figure

Table of Contents

Introduction

There are three basic ways to place multiple plots in a single figure:

par(mfrow) and par(mfcol)

The mfrow parameter to the par() function sets up drawing of multiple plots by row; mfcol sets up drawing of multiple plots by column. A vector with two values must be provided that sets the number of rows and columns.

This command sets up plotting of multiple plots in a two row by three column grid, with the plots drawn along rows first:

##  Open a new default device.

get( getOption( "device" ) )()

##  Set up plotting in two rows and three columns, plotting along rows first.

par( mfrow = c( 2, 3 ) )

##  The first plot is located in row 1, column 1:

plot( rnorm( n = 10 ), col = "red", main = "plot 1", cex.lab = 1.1 )

##  The second plot is located in row 1, column 2:

plot( runif( n = 10 ), col = "blue", main = "plot 2", cex.lab = 1.1 )

##  The third plot is located in row 1, column 3:

plot( rt( n = 10, df = 8 ), col = "springgreen4", main = "plot 3",
    cex.lab = 1.1 )

##  The fourth plot is located in row 2, column 1:

plot( rpois( n = 10, lambda = 2 ), col = "black", main = "plot 4",
    cex.lab = 1.1 )

##  plot.new() skips a position.

plot.new()

##  The fifth plot is located in row 2, column 3:

plot( rf( n = 10, df1 = 4, df2 = 8 ), col = "gray30", main = "plot 5",
    cex.lab = 1.1 )

The output is:

Multiple plot figure from using par( mfrow )

Multiple plot figure from using par(mfrow)

split.screen()

##  Open a new default device.

get( getOption( "device" ) )()

##  Split the screen into two rows and one column, defining screens 1 and 2.

split.screen( figs = c( 2, 1 ) )

##  Split screen 1 into one row and three columns, defining screens 3, 4, and 5.

split.screen( figs = c( 1, 3 ), screen = 1 )

##  Split screen 2 into one row and two columns, defining screens 6 and 7.

split.screen( figs = c( 1, 2 ), screen = 2 )

##  The first plot is located in screen 3:

screen( 3 )
plot( rnorm( n = 10 ), col = "red", main = "plot 1" )

##  The second plot is located in screen 4:

screen( 4 )
plot( runif( n = 10 ), col = "blue", main = "plot 2" )

##  The third plot is located in screen 5:

screen( 5 )
plot( rt( n = 10, df = 8 ), col = "springgreen4", main = "plot 3" )

##  The fourth plot is located in screen 6:

screen( 6 )
plot( rpois( n = 10, lambda = 2 ), col = "black", main = "plot 4" )

##  The fifth plot is located in screen 7:

screen( 7 )
plot( rf( n = 10, df1 = 4, df2 = 8 ), col = "gray30", main = "plot 5" )

##  Close all screens.

close.screen( all = TRUE )

The output is:

Multiple plot figure from using split.screen()

Multiple plot figure from using split.screen()

layout()

def.par <- par(no.readonly = TRUE)

nf <- layout(matrix(c(1,2), 1,2,byrow=T), c(1,1), c(1,1), T)

layout.show(nf)

plot(rnorm(10,0,1))

plot(rnorm(10,0,0.1))

par(def.par)

Overall title

The trick to creating an overall title for a window containing multiple plots is to use mtext(), which draws text in the margin of a figure.

This example, derived from code posted to the R-help list by Chuck Cleland, uses layout() to configure the multiple plots.

##  Open a new default device.

get( getOption( "device" ) )()

##  Set the outer margins so that bottom, left, and right are 0
##  and top is 3 lines of text.

old.par <- par( no.readonly = TRUE )
par( oma = c( 0, 0, 3, 0 ) )

##  Plot using layout().

nf <- layout( matrix( c( 1, 2 ), 1, 2, byrow = TRUE),
    c( 1, 1 ), c( 1, 1 ), TRUE )
layout.show( nf )

##  Create the two plots.

plot( rnorm( n = 10, mean = 0, sd = 1 ) )
plot( rpois( n = 10, lambda = 3 ) )

##  Create an overall title.

mtext( "Centered Overall Title", outer = TRUE )

##  Restore the old plotting parameters.

par( old.par )

The output is:

Example of creating an overall title for a multiple plot figure

Example of creating an overall title for a multiple plot figure

This example, also derived from code posted to the R-help list by Chuck Cleland, uses par(mfrow) to configure the multiple plots.

##  Open a new default device.

get( getOption( "device" ) )()

##  Set up multiple plots in a one row by two column configuration.
##  Set the outer margin so that bottom, left, and right are 0 and
##  top is 2 lines of text.

par( mfrow = c( 1, 2 ), oma = c( 0, 0, 2, 0 ) )

##  Create the two plots.

plot( rnorm( n = 10, mean = 0, sd = 1 ), main = "Normal" )
plot( rpois( n = 10, lambda = 2 ), main = "Poisson" )

##  Create an overall title.

title( "Centered Overall Title", outer = TRUE )

The output is:

Example of creating an overall title for a multiple plot figure

Example of creating an overall title for a multiple plot figure