tidyterra
is an R (R Core Team 2023) package that allows manipulation of spatial data objects as provided by the terra
package (Hijmans 2023), using the syntax of several packages included in the tidyverse (Wickham et al. 2019), such as dplyr
(Wickham et al. 2023), tidyr
(Wickham, Vaughan, and Girlich 2023), or tibble
(Müller and Wickham 2023).
Furthermore, tidyterra
extends the functionality of the ggplot2
package (Wickham 2016) by providing additional geoms and stats 1, as well as carefully chosen scales and color palettes specifically designed for map production.
tidyterra
can manipulate the following classes of terra
objects:
SpatVector
objects, which represent vector data such as points, lines, or polygon geometries.
SpatRaster
objects, which represent raster data in the form of a grid consisting of equally sized rectangles. Each rectangle can contain one or more values.
The first stable version of tidyterra
was included on CRAN on April 24, 2022, and has been actively used by other packages (Quoss et al. (2021), Thuiller et al. (2023), Bachl et al. (2019), Lacko (2023), Buller et al. (2021)) and cited in academic research and publications (Bahlburg et al. (2023), Moraga (2023), Leonardi, Colucci, and Manica (2023)) ever since.
The tidyverse is a compilation of R packages that share an underlying design philosophy, grammar, and data structures. The packages within the tidyverse are widely used by R users for tidying, transforming, and visualizing data.
The tidyverse is designed to work with tidy data (“every column is a variable, every row is an observation, every cell is a single value”), represented in the form of data frames or tibbles. However, it is possible to extend the functionality of tidyverse packages to work with new R object classes by registering the corresponding S3 methods (Wickham 2019). This means that dplyr::mutate()
can be adapted to work with any object of class foo
by creating the corresponding S3 method mutate.foo()
.
While other popular packages designed for spatial data handling, such as sf
(Pebesma 2018) or stars
(Pebesma and Bivand 2023), already provide integration with the tidyverse as part of their infrastructure, terra
objects lack this integration natively. Instead, terra
offers a wide set of functions with their own syntax for transforming and visualizing SpatRaster
and SpatVector
objects.
The tidyterra
package was developed to address this integration gap. By providing the corresponding S3 methods, data analysts can apply the same syntax and functions they are already familiar with for rectangular data to the objects provided by terra.
This enables users who are not familiar with spatial data analysis to approach this area more easily.
In addition, tidyterra
also offers functions for plotting terra
objects using the ggplot2
syntax. Although packages like rasterVis
(Perpiñán and Hijmans 2023) and ggspatial
(Dunnington 2023) already include similar functionality for SpatRaster
objects, tidyterra
functions also support SpatVector
objects. Furthermore, tidyterra
allows users to create faceted maps for multi-layer raster files and compute contour lines and contour-filled polygons.
Lastly, tidyterra
provides a collection of color palettes specifically designed for representing spatial phenomena (Lindsay 2018). Additionally, it implements the cross-blended hypsometric tints described by Patterson and Jenny (2011).
The development philosophy of tidyterra
consists on adapting terra
objects to data frame-like structures by performing different data transformations, that ultimately may impact in the performance of the package.
When working with large raster files (i.e. more than 10.000.000 cells), it is recommended to use the native terra
syntax, that is specifically designed for handling this type of files.
Note also that when possible, the help page of each function of tidyterra
references its equivalent in terra
.
tidyterra
is available on CRAN, so it can be easily installed using the following commands in R:
install.packages("tidyterra")
The following example demonstrates how to manipulate a SpatRaster
object using the dplyr
syntax. Additionally, it illustrates how to seamlessly plot a SpatRaster
object with ggplot2
using the geom_spatraster()
function:
library(tidyterra)
library(dplyr)
library(ggplot2)
library(scales) # Additional library for labels
# Temperatures in Castille and Leon (selected months)
<- terra::rast(system.file("extdata/cyl_temp.tif",
rastertemp package = "tidyterra"
))
# Rename with the tidyverse
<- rastertemp %>%
rastertemp rename(April = tavg_04, May = tavg_05, June = tavg_06)
# Plot with facets
ggplot() +
geom_spatraster(data = rastertemp) +
facet_wrap(~lyr, ncol = 2) +
scale_fill_whitebox_c(
palette = "muted",
labels = label_number(suffix = "º"),
n.breaks = 12,
guide = guide_legend(reverse = TRUE)
+
) labs(
fill = "",
title = "Average temperature in Castille and Leon (Spain)",
subtitle = "Months of April, May and June"
)
Figure 1: Faceted map with multi-layer raster file.
The package documentation includes several examples of the use of tidyterra
, and it can be accessed online at https://dieghernan.github.io/tidyterra/.
I would like to thank Robert J. Hijmans for his advice and support in adapting some of the methods, as well as for the suggestions that helped us improve the functionalities of the package. I am also thankful to Dewey Dunnington, Brent Thorne, and the rest of contributors of the ggspatial
package, which served as a key reference during the initial stages of the development of tidyterra
.
tidyterra
also incorporates some pieces of code adapted from ggplot2
for computing contours, which relies on the package isoband
(Wickham, Wilke, and Pedersen 2022) developed by Claus O. Wilke.
The term “geoms” refers to geometric objects, and “stats” refers to statistical transformations, following the naming conventions of ggplot2
↩︎