I have a three layer raster with red, green, and blue channel values in it. I can plot the image with raster::plotRGB
, but I need to add axes with UTM coordinates. Coordinates can be added with axes=TRUE
, but they are floating in space and look bad. I would like to get the coordinates as they show up in plots created with the raster
plot
method, or better yet as they appear when using rasterVis::levelplot
.
Ultimately, I need to create a raster image with UTM coordinates, a scale bar, and north arrow. This needs to be done using the plotRGB
function in the raster
package of R, or something with a similar functionality, as I need to assign the colour of each pixel by hand (no colour ramps).
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"))
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)
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With