View source: R/tm_layers_polygons.R
| tm_polygons | R Documentation |
Map layer that draws polygons. Supported map variables are: fill (the fill color),
col (the border color), lwd (line width), lty (line type),
fill_alpha (fill color alpha transparency) and col_alpha (border color alpha transparency).
tm_polygons(
fill = tm_const(),
fill.scale = tm_scale(),
fill.legend = tm_legend(),
fill.chart = tm_chart_none(),
fill.free = NA,
col = tm_const(),
col.scale = tm_scale(),
col.legend = tm_legend(),
col.chart = tm_chart_none(),
col.free = NA,
lwd = tm_const(),
lwd.scale = tm_scale(),
lwd.legend = tm_legend(),
lwd.chart = tm_chart_none(),
lwd.free = NA,
lty = tm_const(),
lty.scale = tm_scale(),
lty.legend = tm_legend(),
lty.chart = tm_chart_none(),
lty.free = NA,
fill_alpha = tm_const(),
fill_alpha.scale = tm_scale(),
fill_alpha.legend = tm_legend(),
fill_alpha.chart = tm_chart_none(),
fill_alpha.free = NA,
col_alpha = tm_const(),
col_alpha.scale = tm_scale(),
col_alpha.legend = tm_legend(),
col_alpha.chart = tm_chart_none(),
col_alpha.free = NA,
linejoin = "round",
lineend = "round",
plot.order = tm_plot_order("lwd", reverse = TRUE, na.order = "bottom"),
zindex = NA,
group = NA,
group.control = "check",
popup = tm_popup(),
popup.vars = NA,
popup.format = tm_label_format(),
hover = NA,
id = "",
blend = "over",
options = opt_tm_polygons(),
...
)
tm_fill(...)
tm_borders(col = tm_const(), ...)
opt_tm_polygons(polygons.only = "ifany")
fill, fill.scale, fill.legend, fill.chart, fill.free |
Map variable that determines the fill color. See details. Unit: Color – a color name, hex string. |
col, col.scale, col.legend, col.chart, col.free |
Map variable that determines the color. See details. Unit: Color – a color name, hex string. |
lwd, lwd.scale, lwd.legend, lwd.chart, lwd.free |
Map variable that determines the line width. See details. Unit: Base R line-width units; 1 lwd is approx. 0.75 pt at 96 dpi. |
lty, lty.scale, lty.legend, lty.chart, lty.free |
Map variable that determines the line type. See details. Unit: Integer (1-6) or name: "solid", "dashed", "dotted", "dotdash", "longdash", "twodash". |
fill_alpha, fill_alpha.scale, fill_alpha.chart, fill_alpha.legend, fill_alpha.free |
Map variable that determines the fill color transparency. See details. Unit: Proportion – numeric 0-1 (0 = fully transparent, 1 = fully opaque). |
col_alpha, col_alpha.scale, col_alpha.legend, col_alpha.chart, col_alpha.free |
Map variable that determines the color transparency. See details. Unit: Proportion – numeric 0-1 (0 = fully transparent, 1 = fully opaque). |
linejoin, lineend |
Line join and line end. See gpar() for details. |
plot.order |
Specification in which order the spatial features are drawn.
See |
zindex |
Controls the stacking order of map layers. Should be set to a value above 400. By default, layers are stacked in call order, starting at 401. See details. |
group |
Name of the group to which this layer belongs. This is only
relevant in view mode, where layer groups can be switched (see |
group.control |
In view mode, the group control determines how layer groups
can be switched on and off. Options: |
popup |
popup specification for |
popup.vars |
(Deprecated.) Use |
popup.format |
(Deprecated.) Use |
hover |
name of the data variable that specifies the hover labels (view mode only). Set to |
id |
name of the data variable that specifies the indices of the spatial
features. Only used for |
blend |
Compositing operator for layer blending. Default |
options |
options passed on to the corresponding |
... |
to catch deprecated arguments from version < 4.0 |
polygons.only |
should only polygon geometries of the shape object (defined in |
The map variable arguments (e.g. col) can be specified with a data
variable name (e.g., a spatial vector attribute or a raster layer of the object
specified in tm_shape()), with a visual value (for col, a color is expected), or with a geometry-derived variable (see below).
See vignette: Map variables.
Multiple values can be specified: in that case facets are created.
These facets can be combined with other faceting data variables, specified with tm_facets().
See vignette: Facets.
The *.scale arguments determine the used scale to map the data values to
map variable values. These can be specified with one of the available
tm_scale_*() functions. The default is specified by the tmap option (tm_options()) scales.var.
See 'rvignette: Scales
The *.legend arguments determine the used legend, specified with tm_legend().
The default legend and its settings are determined by the tmap options (tm_options()) legend. .
See 'rvignette: Legends
The *.chart arguments specify additional charts, specified with tm_chart_, e.g. tm_chart_histogram().
See 'rvignette: Charts
The *.free arguments determine whether scales are applied freely across facets, or shared.
A logical value is required. They can also be specified with a vector of three
logical values; these determine whether scales are applied freely per facet dimension.
This is only useful when facets are applied (see tm_facets()).
There are maximally three facet dimensions: rows, columns, and pages. This only
applies for a facet grid (tm_facets_grid()). For instance, col.free = c(TRUE, FALSE, FALSE)
means that for the map variable col, each row of facets will have its own
scale, and therefore its own legend. For facet wraps and stacks
(tm_facets_wrap() and tm_facets_stack()) there is only one facet dimension,
so the *.free argument requires only one logical value.
Currently, three geometry-derived variables are implemented:
"AREA" (polygons only), which uses the feature area;
"LENGTH" (lines only), which uses the feature length; and
"MAP_COLORS", which assigns values so that adjacent features receive
different values, making it particularly suitable for coloring
neighbouring polygons.
Note that geometry-derived variables do not generate a legend automatically.
If a legend is required, compute the corresponding variable explicitly,
for example with sf::st_area(), sf::st_length(), or
tmaptools::map_coloring(), and use the resulting values instead.
Every map variable maps data values to a specific output unit.
Knowing the unit matters when supplying constant values via tm_const(),
or output ranges via values.range / values.scale in the scale
functions.
| Variable | Output unit | Notes |
fill, col, bgcol | color | name, hex, or palette string |
fill_alpha, col_alpha, bgcol_alpha | proportion 0-1 | 0 = transparent, 1 = opaque |
size (symbols, bubbles, squares, dots) | typographic lines | 1 line approx. 1/6 inch; scaled by values.scale |
size (circles) | meters | plain numeric or a units object |
size (text, labels) | multiplier | 1 = 12 pt (plot) / 12 px (view) |
lwd | lwd | base R units; 1 lwd approx. 0.75 pt at 96 dpi |
lty | -- | integer 1-6 or name ("solid", "dashed", ...) |
shape | -- | integer pch 1-25 or single character |
angle | degrees | 0-360, clockwise from north |
fontface | -- | "plain", "bold", "italic", "bold.italic" |
size in tm_symbols, tm_bubbles, tm_squares, tm_dots)"Lines" is a typographic unit: one line is approximately 1/6 inch (the
default base line-height in R graphics). The global multiplier
tmap_options(values.scale = list(size.bubbles = 1.5)) scales all symbol
sizes without changing the data mapping.
size in tm_circles)The value is a geographic radius in meters. A plain numeric vector is
interpreted as meters; a units object (from the units package) is
automatically converted, so units::as_units(1, "mi") gives a 1-mile
radius. Because the radius is geographic, circles scale with zoom in
interactive (view) mode – unlike bubble symbols which keep a fixed screen
size.
size in tm_text, tm_labels)The value is a multiplier of the base font size. size = 1 renders at
12 pt in plot mode (R's default par("ps")) and at 12 px in view
mode (gp$cex * 12 px, see tmapLeafletDataPlot.tm_data_text); the two
modes are consistent by design.
blend)Blend modes control how a layer's pixels are combined with the pixels
beneath it. For each pixel, let S be the source (top layer) RGB
value and D be the destination (bottom layer) RGB value, both
normalised to [0, 1].
blend | Formula | Use case |
"over" | S \cdot \alpha + D \cdot (1 - \alpha) | Standard alpha compositing (default) |
"multiply" | S \times D | Hillshading over color raster; both layers darken each other |
"screen" | 1 - (1 - S)(1 - D) | Inverse of multiply; brightens |
"overlay" | multiply if D < 0.5, screen if D \geq 0.5 | Boosts contrast; preserves midtones |
"darken" | \min(S, D) | Keeps the darker of the two layers per channel |
"lighten" | \max(S, D) | Keeps the lighter of the two layers per channel |
Requires R >= 4.2 and a compatible graphics device (e.g.
png(type = "cairo"), svg()). In view mode, blending is applied via
CSS mix-blend-mode. See grid::groupGrob() for the full list of
supported operators.
In view mode, each layer is rendered in a Leaflet pane named "tmap{zindex}"
(e.g., "tmap401", "tmap402"), with base tile layers placed in the
standard "tile" pane.
Map variables, Scales, Legends, Facets, Units, Layer blending, Choropleth (World), Choropleth (Netherlands), Bivariate choropleth, Gridmap
# load Africa country data
data(World)
Africa = World[World$continent == "Africa", ]
Africa_border = sf::st_make_valid(sf::st_union(sf::st_buffer(Africa, 0.001))) # slow and ugly
# without specifications
tm_shape(Africa_border) + tm_polygons()
tm_shape(Africa_border) + tm_fill()
tm_shape(Africa_border) + tm_borders()
# specification with map variable values
tm_shape(Africa) +
tm_polygons(fill = "limegreen", col = "purple", lwd = 2, lty = "solid", col_alpha = 0.3) +
tm_text("name", options = opt_tm_text(remove_overlap = TRUE)) +
tm_shape(Africa_border) +
tm_borders("darkred", lwd = 3)
# specification with a data variable
tm_shape(Africa) +
tm_polygons(fill = "income_grp", fill.scale = tm_scale_categorical(values = "-tol.muted"))
# continuous color scale with landscape legend
tm_shape(Africa) +
tm_polygons(fill = "inequality",
fill.scale = tm_scale_continuous(values = "-scico.roma"),
fill.legend = tm_legend(
title = "", orientation = "landscape",
position = tm_pos_out("center", "bottom"), frame = FALSE
)) +
tm_shape(Africa_border) +
tm_borders(lwd = 2) +
tm_title("Inequality index", position = tm_pos_in("right", "TOP"), frame = FALSE) +
tm_layout(frame = FALSE)
# bivariate scale
tm_shape(World) +
tm_polygons(tm_vars(c("inequality", "well_being"), multivariate = TRUE))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.