This is an ancient post, but it's a good question so I'll give it an answer.
I'll give an example of how this might be done with rasterVis::levelplot
, using the 3-channel R logo raster data that comes with raster
.
library(rasterVis)
b <- brick(system.file("external/rlogo.grd", package="raster"))
Plotting three-channel RGB rasters with levelplot
Create an empty raster
with the same dimensions and extent as the brick.
r <- raster(b)
Calculate the hexadecimal colours corresponding to the values of the RGB channels, and coerce to factor
.
cols <- factor(rgb(b[], maxColorValue=255))
Assign these factor values to the raster's cells.
r[] <- cols
Plot with levelplot
, extracting the hexadecimal colours from the levels of cols
and passing them to col.regions
.
levelplot(r, col.regions=as.character(levels(cols)), colorkey=FALSE)
Adding north arrow and scale bar
For the north arrow and the scale bar, we will look to @OscarPerpiñán's docs.
levelplot(r, col.regions=as.character(levels(cols)), colorkey=FALSE) +
layer(SpatialPolygonsRescale(layout.north.arrow(), offset = c(5, 10), scale = 10)) +
layer({
xs <- seq(5, 25, by=5)
grid.rect(x=xs, y=5,
width=5, height=2,
gp=gpar(fill=rep(c('transparent', 'black'), 2)),
default.units='native')
grid.text(x=xs-2.5, y=8, seq(0, 400, by=100),
gp=gpar(cex=0.7),
default.units='native')
})
I'll leave it up to you to calculate the true distance (passed to grid.text
) associated with the width, in map units, of the rectangles.