[R-sig-Geo] suggestion for sp.grid()
Edzer Pebesma
edzer.pebesma at uni-muenster.de
Wed Dec 15 20:09:08 CET 2010
I just looked a long time at a comparison between both at:
http://learnr.wordpress.com/2009/08/26/ggplot2-version-of-figures-in-lattice-multivariate-data-visualization-with-r-final-part/
Your inline example, and that in your [2] below are good illustrations
of the enhanced usability (readability) of lattice/latticeExtra syntax -
thanks!
On 12/15/2010 06:24 PM, Dylan Beaudette wrote:
> Thanks Edzer. It seems like there is increasing interest in the use of
> ggplot2 functions for plotting spatial data-- possibly due to the
> complexity of lattice graphics. However, I think that the latticeExtra
> package [1] may have some exciting new functionality that could make
> spplot() a much more attractive option for making maps. I spent a
> little time last night tinkering with spplot and legend placement [2].
> When I have some more time, I'll see about working up some more
> examples using latticeExtra functions.
>
> Cheers,
> Dylan
>
> 1. http://latticeextra.r-forge.r-project.org/
> 2. http://casoilresource.lawr.ucdavis.edu/drupal/node/962
>
> On Wed, Dec 15, 2010 at 9:13 AM, Edzer Pebesma
> <edzer.pebesma at uni-muenster.de> wrote:
>> Thanks for the clear example, Dylan. I made this change, and it will be
>> in the next version of sp.
>>
>> On 12/15/2010 05:57 PM, Dylan Beaudette wrote:
>>> Shouldn't be posting questions late into the night. I realized that my
>>> example was not reproducible.
>>>
>>> One more time:
>>>
>>> # setup environment
>>> library(gstat)
>>> library(latticeExtra)
>>> library(grid)
>>>
>>> # load example data
>>> data(meuse.grid)
>>>
>>> coordinates(meuse.grid) <- ~ x + y
>>> gridded(meuse.grid) <- TRUE
>>> meuse.grid$soil <- factor(meuse.grid$soil, labels=c('A','B','C'))
>>>
>>>
>>> # hacked version of sp.grid()
>>> sp.grid <- function (obj, col = 1, alpha = 1, ...)
>>> {
>>> if (is.character(obj))
>>> obj = get(obj)
>>> xy = coordinates(obj)
>>> if (length(col) != 1 && length(col) != nrow(xy)) {
>>> }
>>> gt = as(getGridTopology(obj), "data.frame")
>>> grid.rect(x = xy[, 1], y = xy[, 2], width = gt$cellsize[1],
>>> height = gt$cellsize[2], default.units = "native", gp =
>>> gpar(fill = col, col = NA, alpha = alpha))
>>> }
>>>
>>>
>>> trellis.par.set(regions=custom.theme()$regions,
>>> superpose.polygon=list(col='black', alpha=0.25))
>>>
>>> # first grid covers entire extent
>>> p3 <- spplot(meuse.grid, 'dist', colorkey=list(space='bottom',
>>> width=1, height=0.5, tick.number=3))
>>>
>>> # overlay partially transparent, kind of a hack...
>>> p3 <- p3 + layer(sp.grid(meuse.grid[meuse.grid$soil == 'A', ],
>>> col='black', alpha=0.25))
>>>
>>> p3 <- update(p3, key=simpleKey('Shaded Region', points=FALSE,
>>> lines=FALSE, rect=TRUE, columns=1, space='top'))
>>>
>>> p3
>>>
>>>
>>>
>>>
>>> On Tue, Dec 14, 2010 at 11:32 PM, Dylan Beaudette
>>> <dylan.beaudette at gmail.com> wrote:
>>>> Hi,
>>>>
>>>> I was tinkering around with some of the new functions from the
>>>> latticeExtra package, and thought of a (messy) hack for plotting
>>>> multiple grids. However, due to the way sp.grid() is currently coded,
>>>> there is no way to define both grid fill color _and_ outline color:
>>>>
>>>> gp = gpar(fill = col, col = NULL, alpha = alpha)
>>>>
>>>> if this line is changed to...
>>>>
>>>> gp = gpar(fill = col, col = NA, alpha = alpha)
>>>>
>>>> then outlines will default to no color... It might be nice to add a
>>>> new parameter to sp.grid() to allow the user to set the outline color
>>>> of the rectangles produced by grid.rect(). If the above line is
>>>> changed so that col=NA, then it is possible to overlay two grids (kind
>>>> of) like this:
>>>>
>>>>
>>>> library(gstat)
>>>> library(latticeExtra)
>>>> library(grid)
>>>>
>>>> # load example data
>>>> data(meuse.grid)
>>>> coordinates(meuse.grid) <- ~ x + y
>>>> gridded(meuse.grid) <- TRUE
>>>>
>>>> # hacked version of sp.grid()
>>>> sp.grid <- function (obj, col = 1, alpha = 1, ...)
>>>> {
>>>> if (is.character(obj))
>>>> obj = get(obj)
>>>> xy = coordinates(obj)
>>>> if (length(col) != 1 && length(col) != nrow(xy)) {
>>>> }
>>>> gt = as(getGridTopology(obj), "data.frame")
>>>> grid.rect(x = xy[, 1], y = xy[, 2], width = gt$cellsize[1],
>>>> height = gt$cellsize[2], default.units = "native", gp =
>>>> gpar(fill = col, col = NA, alpha = alpha))
>>>> }
>>>>
>>>>
>>>> # nice colors
>>>> trellis.par.set(regions=custom.theme()$regions,
>>>> superpose.polygon=list(col='black', alpha=0.25))
>>>>
>>>> # first grid covers entire extent
>>>> p3 <- spplot(meuse.grid, 'dist', colorkey=list(space='bottom',
>>>> width=1, height=0.5, tick.number=3)
>>>>
>>>> # overlay partially transparent, kind of a hack...
>>>> p3 <- p3 + layer(sp.grid(meuse.grid[meuse.grid$soil == 'A', ],
>>>> col='black', alpha=0.25))
>>>>
>>>> # add a new key
>>>> p3 <- update(p3, key=simpleKey('Bad Stuff', points=FALSE, lines=FALSE,
>>>> rect=TRUE, columns=1, space='top'))
>>>>
>>>> print(p3)
>>>>
>>>> Note that I am using an older version of gstat, version 0.9-63. Maybe
>>>> this code has been updated since then. If not, what do you think? Are
>>>> there any better ways to overlay a couple grids?
>>>>
>>>> Cheers,
>>>> Dylan
>>>>
>>>
>>> _______________________________________________
>>> R-sig-Geo mailing list
>>> R-sig-Geo at r-project.org
>>> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>>
>> --
>> Edzer Pebesma
>> Institute for Geoinformatics (ifgi), University of Münster
>> Weseler Straße 253, 48151 Münster, Germany. Phone: +49 251
>> 8333081, Fax: +49 251 8339763 http://ifgi.uni-muenster.de
>> http://www.52north.org/geostatistics e.pebesma at wwu.de
>>
>> _______________________________________________
>> R-sig-Geo mailing list
>> R-sig-Geo at r-project.org
>> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
>>
--
Edzer Pebesma
Institute for Geoinformatics (ifgi), University of Münster
Weseler Straße 253, 48151 Münster, Germany. Phone: +49 251
8333081, Fax: +49 251 8339763 http://ifgi.uni-muenster.de
http://www.52north.org/geostatistics e.pebesma at wwu.de
More information about the R-sig-Geo
mailing list