[R-sig-Geo] how to plot different rows of a SpatialPolygonsDataFrame in trellis panels

Edzer Pebesma edzer@pebe@m@ @ending from uni-muen@ter@de
Fri Jun 1 08:17:48 CEST 2018



On 06/01/2018 05:38 AM, Waichler, Scott R wrote:
> Kent,
> 
> Thank you for your response to my problem.  Unfortunately, I can't use sf because it has system dependencies I can't meet.  I am using RHEL 6, and am up-to-date with it for gdal, geos, and proj (versions 1.7.3, 3.3.2, 4.7.0 respectively), but the R package sf requires later versions for all of these.   The vignettes for sf make it sound very useful, but alas it seems to be out of reach for me at present.  I am surprised a package that is being positioned for widespread adoption has such stringent requirements.

According to https://download.osgeo.org/gdal/old_releases/ the gdal
version you are running is from 2010. You may have followed how gdal has
improved since 2010, and how it has continuously adapted to the dynamics
of the geospatial software ecosystem, as well as to the development of
new geospatial standards.

I made a deliberate choice to let sf users benefit from these
improvements by picking gdal 2.0.1 from 2015 as a minimum requirement,
rather than keep them in the stone ages.

Keeping sf, rgdal and rgeos to work with new releases of gdal, geos and
proj takes a considerable amount of our time not only for Roger and me,
but also for the CRAN maintainers. I hope this takes away some of your
surprise.

> 
> Best,
> Scott Waichler
> Pacific Northwest National Laboratory
> Richland, Washington, USA
> 
>> -----Original Message-----
>> From: Kent Johnson [mailto:kent3737 using gmail.com]
>> Sent: Thursday, May 24, 2018 6:05 AM
>> To: r-sig-geo using r-project.org; Waichler, Scott R <Scott.Waichler using pnnl.gov>
>> Subject: Re: how to plot different rows of a SpatialPolygonsDataFrame in
>> trellis panels
>>
>> On Thu, May 24, 2018 at 6:00 AM, <r-sig-geo-request using r-project.org> wrote:
>>
>> Message: 1
>> Date: Wed, 23 May 2018 18:39:07 +0000
>> From: "Waichler, Scott R" <Scott.Waichler using pnnl.gov>
>> To: "r-sig-geo using r-project.org" <r-sig-geo using r-project.org>
>> Subject: [R-sig-Geo] how to plot different rows of a
>>         SpatialPolygonsDataFrame in trellis panels
>>
>> Hello,
>>
>> I have a SpatialPolygonsDataFrame.  I would like to do a trellis plot on one of
>> the attributes, so that in the panel for a given attribute value, only those
>> polygons with that value are plotted.  So, each panel has different polygons
>> plotted in it.  I can't figure out how to do this.  In the toy example below, I
>> would like to create a trellis plot with one panel showing the polygons with id
>> = 1, and another panel showing the polygons with id = 2.
>>
>> My goal beyond this toy problem is to do the same thing with stplot, where
>> panels correspond to times and each time has a different set of polygons
>> plotted.  Will that be possible?  In all the examples I can find of using stplot
>> for a space-time grid with the spatial objects being polygons, the polygons
>> are the same across time.
>>
>> # based on example in help("SpatialPolygonsDataFrame-class")
>> Sr1 = Polygon(cbind(c(2,4,4,1,2),c(2,3,5,4,2)))
>> Sr2 = Polygon(cbind(c(5,4,2,5),c(2,3,2,2)))
>> Sr3 = Polygon(cbind(c(4,4,5,10,4),c(5,3,2,5,5)))
>> Sr4 = Polygon(cbind(c(5,6,6,5,5),c(4,4,3,3,4)), hole = TRUE)
>> Srs1 = Polygons(list(Sr1), "s1")
>> Srs2 = Polygons(list(Sr2), "s2")
>> Srs3 = Polygons(list(Sr3, Sr4), "s3/4")
>> SpP = SpatialPolygons(list(Srs1,Srs2,Srs3), 1:3)
>> grd <- GridTopology(c(1,1), c(1,1), c(10,10))
>> polys <- as(grd, "SpatialPolygons")
>> centroids <- coordinates(polys)
>> x <- centroids[,1]
>> y <- centroids[,2]
>> z <- 1.4 + 0.1*x + 0.2*y + 0.002*x*x
>> id = factor(sample(c(1,2), size=length(polys), replace=T))
>> tmp <- SpatialPolygonsDataFrame(polys,
>>       data=data.frame(x=x, y=y, z=z, id=id, row.names=row.names(polys)))
>> plot(tmp)  # plots all the square polygons (n = 10*10)
>> spplot(tmp)  # plots values of x, y, z, id in separate panels, each with 100
>> polys
>> spplot(tmp, zcol=z)  # error message about duplication of factor level
>> spplot(tmp ~ id, zcol=z, data=tmp)  # won't take formula
>>
>> You can do the facetting with ggplot2::geom_sf (in the dev version of
>> ggplot2) though I don't think it will use different coordinate ranges for
>> different facets:
>>
>> devtools::install_github('tidyverse/ggplot2')
>> library(sf)
>> library(ggplot2)
>> tmp2 = st_as_sf(tmp)
>>
>> ggplot(tmp2) + geom_sf(aes(fill=z)) + facet_wrap(~id)
>>
>> A couple of suggestions here, using tmap or ggspatial, that look promising:
>> https://stackoverflow.com/questions/47678480/mapping-different-states-
>> with-geom-sf-using-facet-wrap-and-scales-free
>>
>> Kent Johnson
>>
>>
>> Thank you,
>> ScottWaichler
>> Pacific Northwest National Laboratory
>> scott.waichler _at_ pnnl.gov
> _______________________________________________
> R-sig-Geo mailing list
> R-sig-Geo using r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-sig-geo
> 

-- 
Edzer Pebesma
Institute for Geoinformatics
Heisenbergstrasse 2, 48151 Muenster, Germany
Phone: +49 251 8333081



More information about the R-sig-Geo mailing list