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 8 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-08/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, you 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, you have created a 2 by 2 grid of plots using mfrow=c(2,2) within the par() function. In this example you 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, you added an overall title to your 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. You can adjust for this too using the oma= parameter argument. oma sets the outside (o) margin (ma).

oma= argument in your 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