Hi, Just to add one more solution. It uses the rasterVis package (at R-Forge now and should be at CRAN today).
library(raster) library(rasterVis) levelplot(s, par.settings=RdBuTheme) More examples here: http://rastervis.r-forge.r-project.org/ Best, Oscar. ------------------- Oscar Perpiñán Lamigueiro Dpto. Ingeniería Eléctrica EUITI-UPM http://procomun.wordpress.com ----------------------------------------- >I summarize here the different solutions I got to my question regarding >how to plot several raster layers on the same page and with the same >color scale. >Sorry it took a long time, I was interrupted by something else for >weeks. Hope this is useful. >Many thanks to all. > > >require(raster) >require(ggplot2) >require(plotrix) >require(rasterVis) >require(lattice) > >foo1 <- foo2 <- foo3<- foo4 <- raster(nrows=20, ncols=20) >values(foo1) <- runif(400,-100.100) >values(foo2) <- runif(400,-150,100) >values(foo3) <- runif(400,0,50) >values(foo4) <- runif(400,-100,150) >extent(foo1) = extent(foo2) = extent(foo3) = extent(foo4) = >extent(c(0,20,0,20)) > > >#Based on comment by Jeremy Raw and andy.b...@wwu.edu >par(mfrow=c(2,2)) >plot(foo1,col=rev(heat.colors(32)),zlim=c(-150,150)) >plot(foo2,col=rev(heat.colors(32)),zlim=c(-150,150)) >plot(foo3,col=rev(heat.colors(32)),zlim=c(-150,150)) >plot(foo4,col=rev(heat.colors(32)),zlim=c(-150,150)) > >#Note by ALOBO: simplest solution > >#Based on comment by Adam Sparks >require(plotrix) >minValue = -150 >maxValue = 150 >colstep=10 >brk = c(minValue, maxValue, by = colstep) >brk = seq(minValue, maxValue, by = colstep) >par(mfrow=c(2,2)) >plot(foo1, breaks = brk, col = rev(heat.colors(30)), axes = FALSE, >xlab = '', ylab = '', legend = FALSE) >color.legend(xl=20.5,yb=1,xr=21.5,yt=18, legend = seq(minValue, >maxValue, by = 3*colstep), > rect.col = rev(heat.colors(30)),pos=4,gradient="y",cex=0.55,offset=2, >col="black") >plot(foo2, breaks = brk, col = rev(heat.colors(30)),legend = FALSE, >xlab = '', ylab = '',) >color.legend(xl=20.5,yb=1,xr=21.5,yt=18, legend = seq(minValue, >maxValue, by = 3*colstep), > rect.col = rev(heat.colors(30)),pos=4,gradient="y",cex=0.55,offset=2, >col="black") >plot(foo3, breaks = brk, col = rev(heat.colors(30)),legend = FALSE, >xlab = '', ylab = '',) >color.legend(xl=20.5,yb=1,xr=21.5,yt=18, legend = seq(minValue, >maxValue, by = 3*colstep), > rect.col = rev(heat.colors(30)),pos=4,gradient="y",cex=0.55,offset=2, >col="black") >plot(foo3, breaks = brk, col = rev(heat.colors(30)),legend = FALSE, >xlab = '', ylab = '',) >color.legend(xl=20.5,yb=1,xr=21.5,yt=18, legend = seq(minValue, >maxValue, by = 3*colstep), > rect.col = rev(heat.colors(30)),pos=4,gradient="y",cex=0.55,offset=2, >col="black") > > >#Note by ALOBO: in practice, you must use hist() to determine >meaningful min and max values in both cases > > >#Based on comment by paul.hiems...@knmi.nl >library(ggplot2) >library(raster) >theme_set(theme_bw()) > >r = foo1 > ># Convert to data.frame >r_df = as.data.frame(as(r, 'SpatialPixelsDataFrame')) >print(str(r_df)) ># create new column 10 times larger ># here you could extract data from other grids that ># you want to show at the same time >r_df$foo2 = values(foo2) >r_df$foo3 = values(foo3) >r_df$foo4 = values(foo4) > >print(str(r_df)) > ># Reshape the data for ggplot >plotData = melt(r_df, id.vars = c('x','y')) > >ggplot(aes(x = x, y = y), data = plotData) + > geom_tile(aes(fill = value)) + facet_wrap(~ variable) + > scale_fill_gradient(low = 'white', high = 'blue') + > coord_equal() > >#Note by ALOBO: while this is the most aesthetic solution, would it >work for large raster objects? > > >#Based on comment by Robert Hijmans: >#Requires raster version >= 1.8-33 and rasterVis > >s <- stack(foo1,foo2, foo3,foo4) >spplot(s) >theme_set(theme_bw()) >gplot(s) + geom_tile(aes(fill = value)) + facet_wrap(~ variable) + > scale_fill_gradient(low = 'white', high = 'blue') + > coord_equal() > >#Note by ALOBO: assumed it automatically makes a sampleRegular() for >large raster objects? >#In such a case, it would combine aesthetic and performance _______________________________________________ R-sig-Geo mailing list R-sig-Geo@r-project.org https://stat.ethz.ch/mailman/listinfo/r-sig-geo