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

Roger Bivand Roger@Biv@nd @ending from nhh@no
Fri Jun 1 09:29:09 CEST 2018


On Fri, 1 Jun 2018, Edzer Pebesma wrote:

>
>
> 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.

RHEL 6 is EOL in November 2020, so now is the time to move forward. As 
Edzer mentions, PROJ, GDAL and GEOS have fixed multiple bugs GDAL has 
introduced new drivers over the succession of releases. The GDAL API 
changed after 1.11.*, but rgdal does still build with GDAL 1.11.4 and PROJ 
4.8.0 (checked recently). From the next (forthcoming) release (1.3.*) of 
rgdal, these will be the minimum versions permitted. Even CentOS/RHEL 7 
need to install a C++11-capable compiler to build GDAL 2.3.0 - see the 
thread at:

https://stat.ethz.ch/pipermail/r-sig-geo/2018-May/026591.html

As Edzer mentions below, users cannot reasonably expect package authors 
and maintainers to keep things running in current packages for EOL-near 
platforms. If you can provide docker images/containers to emulate near-EOL 
platforms (compilers, external dependencies, etc), you can contribute back 
to others and protect your workflows by checking systematically that 
development versions of sf and rgdal/rgeos can still be installed, pass 
R CMD check, and that updates in R packages don't change your results in 
other ways than bug-fixes would cause.

We know that institutional users cannot freely upgrade platforms, but RHEL 
6 perhaps indicates critical failure to invest by the institution; we know 
it happens, but this can't be a priority for package author and maintainer 
time.

Roger

>
> 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
>>
>
>

-- 
Roger Bivand
Department of Economics, Norwegian School of Economics,
Helleveien 30, N-5045 Bergen, Norway.
voice: +47 55 95 93 55; e-mail: Roger.Bivand using nhh.no
http://orcid.org/0000-0003-2392-6140
https://scholar.google.no/citations?user=AWeghB0AAAAJ&hl=en


More information about the R-sig-Geo mailing list