isoband v0.2.1

0

Monthly downloads

0th

Percentile

Generate Isolines and Isobands from Regularly Spaced Elevation Grids

A fast C++ implementation to generate contour lines (isolines) and contour polygons (isobands) from regularly spaced grids containing elevation data.

Readme

isoband isoband logo

Build
Status AppVeyor build
status Coverage
Status CRAN
status Lifecycle:
maturing

Generate contour lines (isolines) and contour polygons (isobands) from regularly spaced grids containing elevation data.

Installation

Install the latest official release from CRAN via:

install.packages("isoband")

Install the current development from github via:

remotes::install_github("wilkelab/isoband")

Examples

The two main workhorses of the package are the functions isolines() and isobands(), respectively. They return a list of isolines/isobands for each isolevel specified. Each isoline/isoband consists of vectors of x and y coordinates, as well as a vector of ids specifying which sets of coordinates should be connected. This format can be handed directly to grid.polyline()/grid.path() for drawing. However, we can also convert the output to spatial features and draw with ggplot2 (see below).

library(isoband)

m <- matrix(c(0, 0, 0, 0, 0,
              0, 1, 2, 1, 0,
              0, 1, 2, 0, 0,
              0, 1, 0, 1, 0,
              0, 0, 0, 0, 0), 5, 5, byrow = TRUE)

isolines(1:ncol(m), 1:nrow(m), m, 0.5)
#> $`0.5`
#> $`0.5`$x
#>  [1] 4.00 3.50 3.00 2.50 2.00 1.50 1.50 1.50 2.00 3.00 4.00 4.50 4.00 3.75 4.00
#> [16] 4.50 4.00
#> 
#> $`0.5`$y
#>  [1] 4.50 4.00 3.75 4.00 4.50 4.00 3.00 2.00 1.50 1.25 1.50 2.00 2.50 3.00 3.50
#> [16] 4.00 4.50
#> 
#> $`0.5`$id
#>  [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
#> 
#> 
#> attr(,"class")
#> [1] "isolines" "iso"

isobands(1:ncol(m), 1:nrow(m), m, 0.5, 1.5)
#> $`0.5:1.5`
#> $`0.5:1.5`$x
#>  [1] 2.50 2.00 1.50 1.50 1.50 2.00 3.00 4.00 4.50 4.00 3.75 4.00 4.50 4.00 3.50
#> [16] 3.00 3.00 3.25 3.50 3.00 2.50 2.50
#> 
#> $`0.5:1.5`$y
#>  [1] 4.00 4.50 4.00 3.00 2.00 1.50 1.25 1.50 2.00 2.50 3.00 3.50 4.00 4.50 4.00
#> [16] 3.75 3.25 3.00 2.00 1.75 2.00 3.00
#> 
#> $`0.5:1.5`$id
#>  [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2
#> 
#> 
#> attr(,"class")
#> [1] "isobands" "iso"

The function plot_iso() is a convenience function for debugging and testing.

plot_iso(m, 0.5, 1.5)

The isolining and isobanding algorithms have no problem with larger datasets. Let’s calculate isolines and isobands for the volcano dataset, convert to sf, and plot with ggplot2.

library(ggplot2)
suppressWarnings(library(sf))
#> Linking to GEOS 3.7.2, GDAL 2.4.2, PROJ 5.2.0

m <- volcano
b <- isobands((1:ncol(m))/(ncol(m)+1), (nrow(m):1)/(nrow(m)+1), m, 10*(9:19), 10*(10:20))
l <- isolines((1:ncol(m))/(ncol(m)+1), (nrow(m):1)/(nrow(m)+1), m, 10*(10:19))

bands <- iso_to_sfg(b)
data_bands <- st_sf(
  level = 1:length(bands),
  geometry = st_sfc(bands)
)
lines <- iso_to_sfg(l)
data_lines <- st_sf(
  level = 2:(length(lines)+1),
  geometry = st_sfc(lines)
)

ggplot() +
  geom_sf(data = data_bands, aes(fill = level), color = NA, alpha = 0.7) +
  geom_sf(data = data_lines, color = "black") +
  scale_fill_viridis_c(guide = "none") +
  coord_sf(expand = FALSE)

Functions in isoband

Name Description
plot_iso Visualize a single isoband
clip_lines Clip lines so they don't run into a set of boxes.
angle_halfcircle_bottom Standardize label angles
label_placer_minmax Set up a label placement strategy
label_placer_simple Generic label placement function
isoband Generate isolines and isobands
isolines_grob Render labeled isolines
isobands Efficient calculation of isolines and isobands from elevation grid
isobands_grob Render isobands
iso_to_sfg Convert isolines or isobands to sfg object
No Results!

Vignettes of isoband

Name
isoband1.Rmd
isoband2.Rmd
isoband3.Rmd
No Results!

Last month downloads

Details

URL https://github.com/wilkelab/isoband
BugReports https://github.com/wilkelab/isoband/issues
License MIT + file LICENSE
Encoding UTF-8
LazyData true
LinkingTo Rcpp, testthat
RoxygenNote 7.0.2
SystemRequirements C++11
VignetteBuilder knitr
NeedsCompilation yes
Packaged 2020-04-12 08:55:17 UTC; clauswilke
Repository CRAN
Date/Publication 2020-04-12 09:40:02 UTC

Include our badge in your README

[![Rdoc](http://www.rdocumentation.org/badges/version/isoband)](http://www.rdocumentation.org/packages/isoband)