#' Create a style catalogue
#'
#' Create a style catalogue for each predefined tmap style. The result is a set of png images, one for each style.
#'
#' @param path path where the png images are stored
#' @param styles vector of styles function names (see [tmap_style()]) for which a preview is generated. By default, a preview is generated for all loaded styles.
#' @import grid
#' @rdname tmap_style_catalogue
#' @export
tmap_style_catalogue <- function(path="./tmap_style_previews", styles=NA) {
# get all styles
styles <- get_style_names()
ns <- length(styles)
if (!file.exists(path)) dir.create(path, recursive = TRUE)
# load and process data
World <- metro <- World_rivers <- land <- NULL
data(World, metro, World_rivers, land, envir = environment())
metro$growth <- (metro$pop2020 - metro$pop2010) / (metro$pop2010 * 10) * 100
rivers <- sf::st_transform(rivers, st_crs(World))
pb <- txtProgressBar()
print_style <- function(style, i) {
on.exit(dev.off())
png(file.path(path, paste0(style, ".png")), width=1920, height=1080)
grid.newpage()
pushViewport(viewport(layout = grid.layout(3,3)))
# set progress bar init
pbi <- (i-1)/ns
pbii <- function(i) pbi + (i/9) * (1/ns)
# first column
print(tm_shape(World) +
tm_polygons() +
tm_text("iso_a3", size="AREA") +
tm_symbols() +
tm_shape(World_rivers) +
tm_lines() +
tm_compass() +
tm_scale_bar() +
tm_style(style) + tm_format("World", title="Fixed aesthetics"),
vp = viewport(layout.pos.row = 1, layout.pos.col = 1))
setTxtProgressBar(pb, pbii(1))
print(tm_shape(World) +
tm_borders() +
tm_text("name", size="AREA") +
tm_style(style) + tm_format("World", title="Polygon borders with text"),
vp = viewport(layout.pos.row = 2, layout.pos.col = 1))
setTxtProgressBar(pb, pbii(2))
print(tm_shape(World_rivers, bbox = bb(World)) +
tm_lines() +
tm_style(style) + tm_format("World", title="Lines only"),
vp = viewport(layout.pos.row = 3, layout.pos.col = 1))
setTxtProgressBar(pb, pbii(3))
# second column
print(tm_shape(World) +
tm_polygons("MAP_COLORS", ncols=5) +
tm_style(style) + tm_format("World", title="Map coloring"),
vp = viewport(layout.pos.row = 1, layout.pos.col = 2))
setTxtProgressBar(pb, pbii(4))
print(tm_shape(World) +
tm_polygons() +
tm_shape(metro) +
tm_dots() +
tm_grid(projection = 4326) +
tm_style(style) + tm_format("World", title="Dot map"),
vp = viewport(layout.pos.row = 2, layout.pos.col = 2))
setTxtProgressBar(pb, pbii(5))
print(tm_shape(World) +
tm_polygons() +
tm_shape(metro) +
tm_symbols(size = "pop2010", col = "growth", breaks = c(-Inf, -2, -1, -.5, .5, 1, 2, Inf), midpoint = 0) + tm_style(style) + tm_format("World", title="symbol map"),
vp = viewport(layout.pos.row = 3, layout.pos.col = 2))
setTxtProgressBar(pb, pbii(6))
# third column
print(tm_shape(World) +
tm_polygons("gdp_cap_est", breaks=c(0, 10000, 20000, 30000, 40000, 50000, Inf)) +
tm_text("iso_a3", size="AREA") + tm_style(style) + tm_format("World", title="Choropleth"),
vp = viewport(layout.pos.row = 1, layout.pos.col = 3))
setTxtProgressBar(pb, pbii(7))
print(tm_shape(World) +
tm_polygons("HPI", palette="div", n=9) +
tm_text("iso_a3", size="AREA") + tm_style(style) + tm_format("World", title="Choropleth (diverging)"),
vp = viewport(layout.pos.row = 2, layout.pos.col = 3))
setTxtProgressBar(pb, pbii(8))
print(tm_shape(World) +
tm_polygons("economy") +
tm_text("iso_a3", size="AREA") + tm_style(style) + tm_format("World", title="Categorical map"),
vp = viewport(layout.pos.row = 3, layout.pos.col = 3))
setTxtProgressBar(pb, pbii(9))
upViewport()
}
mapply(print_style, styles, 1:ns)
if (get("tmapOptions", envir = .TMAP)$show.messages) message("\nCatalogue created in ", normalizePath(path))
invisible()
}
#' @export
#' @rdname tmap_style_catalogue
tmap_style_catalog <- tmap_style_catalogue
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.