On Thu, May 24, 2018 at 6:00 AM, <r-sig-geo-requ...@r-project.org> wrote:
> > Message: 1 > Date: Wed, 23 May 2018 18:39:07 +0000 > From: "Waichler, Scott R" <scott.waich...@pnnl.gov> > To: "r-sig-geo@r-project.org" <r-sig-geo@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 > [[alternative HTML version deleted]] _______________________________________________ R-sig-Geo mailing list R-sig-Geo@r-project.org https://stat.ethz.ch/mailman/listinfo/r-sig-geo