Legend of a raster map with categorical data

Wraf picture Wraf · Oct 2, 2013 · Viewed 8.9k times · Source

I would like to plot a raster containing 4 different values (1) with a categorical text legend describing the categories such as 2 but with colour boxes:

I've tried using legend such as :

legend( 1,-20,legend = c("land","ocean/lake", "rivers","water bodies"))

but I don't know how to associate one value to the displayed color. Is there a way to retrieve the colour displayed with 'plot' and to use it in the legend?

Initial raster

Raster with legend

Answer

Josh O'Brien picture Josh O'Brien · Dec 2, 2013

The rasterVis package includes a Raster method for levelplot(), which plots categorical variables and produces an appropriate legend:

library(raster)
library(rasterVis)

## Example data
r <- raster(ncol=4, nrow=2)
r[] <- sample(1:4, size=ncell(r), replace=TRUE)
r <- as.factor(r)

## Add a landcover column to the Raster Attribute Table
rat <- levels(r)[[1]]
rat[["landcover"]] <- c("land","ocean/lake", "rivers","water bodies")
levels(r) <- rat

## Plot
levelplot(r, col.regions=rev(terrain.colors(4)), xlab="", ylab="")

enter image description here