Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Add XY points to raster map generated by levelplot

I have raster maps which are generated using the raster package in R. These raster layers can be visualized using the rasterVis package's levelplot function:

levelplot(rasterstack, layout=c(1, 2), 
          col.regions=colorRampPalette(c('darkred', 'red3', 'orange2', 'orange', 
                                         'yellow', 'lightskyblue', 'steelblue3', 
                                         'royalblue3', 'darkblue')))

Now, I would like to add some z values defined by xy cordinates to the levelplot map. The dataframe containing z values has 4 columns. Columns 1 & 2 contain x & y coordinates, column 3 contains z values for map 1 in layout(1, 1) and column 4 for layout(1, 2).

The points per map should be added such that if z < 0.05, pch=2 and if z > 0.05, pch=3.

I have searched the web and found a solution by Ripley but it does not work in my case:

levelplot(rcp852, xlab = "", ylab = "",
          panel = function(x, y, subscripts, ...) {
            panel.levelplot(x, y, subscripts, ...)
            panel.xyplot(topo$x,topo$y, cex = 0.5, col = 1)
          }
)

I tried many other options but the points do not align with the map generated via levelplot.

like image 436
code123 Avatar asked Feb 19 '15 01:02

code123


1 Answers

layer is very convenient for this:

library(raster)
library(rasterVis)
library(sp)

s <- stack(replicate(2, raster(matrix(runif(100), 10))))
xy <- data.frame(coordinates(sampleRandom(s, 10, sp=TRUE)),
                z1=runif(10), z2=runif(10))
coordinates(xy) <- ~x+y

levelplot(s, margin=FALSE, at=seq(0, 1, 0.05)) + 
  layer(sp.points(xy, pch=ifelse(xy$z1 < 0.5, 2, 3), cex=2, col=1), columns=1) +
  layer(sp.points(xy, pch=ifelse(xy$z2 < 0.5, 2, 3), cex=2, col=1), columns=2)

Note that the columns argument to layer (rows also exists) specifies which panel(s) you want to add the layer to.

enter image description here

like image 167
jbaums Avatar answered Oct 07 '22 17:10

jbaums