Lesson 3. Plot grid of spatial plots in R.


Learning Objectives

After completing this tutorial, you will be able to:

  • Plot several plots using baseplot functions in a “grid” as one graphic in R

What you need

You will need a computer with internet access to complete this lesson and the data for week 6/7 of the course.

Download Week 7 - 9 Data (~500 MB)

# load libraries
library(raster)
library(rgeos)
library(rgdal)
# import landsat data
all_landsat_bands <- list.files("data/week_07/Landsat/LC80340322016189-SC20170128091153/crop",
           pattern = glob2rx("*band*.tif$"),
           full.names = TRUE) # use the dollar sign at the end to get all files that END WITH

all_landsat_bands_st <- stack(all_landsat_bands)

Creating a grid of plots

You can plot several plots together in the same window using baseplot. To do this, we use the parameter value mfrow=c(x,y) where x is the number of rows that you wish to have in your plot and y is the number of columns. When you plot, R will place each plot, in order by row within the grid that you define using mfrow.

Below, we have created a 2 by 2 grid of plots using mfrow=c(2,2) within the par() function. In this example we have 2 rows and 2 columns.

# adjust the parameters so the axes colors are white. Also turn off tick marks.
par(mfrow=c(2,2), col.axis="white", col.lab="white", tck=0)
# plot 1
plotRGB(all_landsat_bands_st,
        r=4,g=3,b=2,
        stretch = "hist",
        main = "Plot 1 - RGB",
        axes = TRUE)
box(col = "white") # turn all of the lines to white

# plot 2
plotRGB(all_landsat_bands_st,
        r=5,g=4,b=3,
        stretch = "hist",
        main = "Plot 2 - Color Infrared (CIR)",
        axes = TRUE)
box(col = "white") # turn all of the lines to white

# plot 3
plotRGB(all_landsat_bands_st,
        r=7,g=5,b=4,
        stretch = "hist",
        main = "Plot 3 - Shortwave infrared",
        axes = TRUE)
box(col = "white") # turn all of the lines to white

# plot 4
plotRGB(all_landsat_bands_st,
        r=5,g=6,b=4,
        stretch = "hist",
        main = "Plot 4 - Land / Water",
        axes = TRUE)
# set bounding box to white as well
box(col = "white") # turn all of the lines to white

# add overall title to your layout
title("My Title", outer=TRUE)

Create 2 x 2 grid of plots.

Above, we added an overall title to our grid of plots using the title() function. However the title is chopped of because there is not enough of a margin at the top for it. We can adjust for this too using the oma= parameter argument. oma sets the outside (o) margin (ma).

oma= argument in our par() function. Let’s try it.

# adjust the parameters so the axes colors are white. Also turn off tick marks.
par(mfrow=c(2,2), oma=c(0,0,2,0), col.axis="white", col.lab="white", tck=0)
# plot 1
plotRGB(all_landsat_bands_st,
        r=4,g=3,b=2,
        stretch = "hist",
        main = "Plot 1 - RGB",
        axes = TRUE)
box(col = "white") # turn all of the lines to white

# plot 2
plotRGB(all_landsat_bands_st,
        r=5,g=4,b=3,
        stretch = "hist",
        main = "Plot 2 - Color Infrared (CIR)",
        axes = TRUE)
box(col = "white") # turn all of the lines to white

# plot 3
plotRGB(all_landsat_bands_st,
        r=7,g=5,b=4,
        stretch = "hist",
        main = "Plot 3 - Shortwave infrared",
        axes = TRUE)
box(col = "white") # turn all of the lines to white

# plot 4
plotRGB(all_landsat_bands_st,
        r=5,g=6,b=4,
        stretch = "hist",
        main = "Plot 4 - Land / Water",
        axes = TRUE)
# set bounding box to white as well
box(col = "white") # turn all of the lines to white

# add overall title to your layout
title("My Title", outer=TRUE)

Remove axes labels.

When you are done with plotting in a grid space, be sure to reset your plot space using dev.off().

dev.off()

Your homework this week should look something like this:

grid of plots

Leave a Comment