When a color palette function is used in a map (e.g.
colorNumeric), a color legend can be automatically derived from
the palette function. You can also manually specify the colors and labels for
the legend.
addLegend(
map,
position = c("topright", "bottomright", "bottomleft", "topleft"),
pal,
values,
na.label = "NA",
bins = 7,
colors,
opacity = 0.5,
labels = NULL,
labFormat = labelFormat(),
title = NULL,
className = "info legend",
layerId = NULL,
group = NULL,
data = getMapData(map)
)
labelFormat(
prefix = "",
suffix = "",
between = " – ",
digits = 3,
big.mark = ",",
transform = identity
)a map widget object created from leaflet()
the position of the legend
the color palette function, generated from
colorNumeric(), colorBin(), colorQuantile(), or
colorFactor()
the values used to generate colors from the palette function
the legend label for NAs in values
an approximate number of tick-marks on the color gradient for the
colorNumeric palette if it is of length one; you can also provide a
numeric vector as the pre-defined breaks (equally spaced)
a vector of (HTML) colors to be used in the legend if
pal is not provided
the opacity of colors
a vector of text labels in the legend corresponding to
colors
a function to format the labels derived from pal and
values (see Details below to know what labelFormat() returns
by default; you can either use the helper function labelFormat(), or
write your own function)
the legend title
extra CSS classes to append to the control, space separated
the ID of the legend; subsequent calls to addLegend
or addControl with the same layerId will replace this
legend. The ID can also be used with removeControl.
group name of a leaflet layer group.
Supplying this value will tie the legend to the leaflet layer group
with this name and will auto add/remove the legend as the
group is added/removed, for example via layerControl.
You will need to set the group when you add a layer
(e.g. addPolygons) and supply the same name here.
the data object from which the argument values are derived; by
default, it is the data object provided to leaflet()
initially, but can be overridden
a prefix of legend labels
a suffix of legend labels
a separator between x[i] and x[i + 1] in legend
labels (by default, it is a dash)
the number of digits of numeric values in labels
the thousand separator
a function to transform the label value
The labFormat argument is a function that takes the argument
type = c("numeric", "bin", "quantile", "factor"), plus, arguments for
different types of color palettes. For the colorNumeric() palette,
labFormat takes a single argument, which is the breaks of the numeric
vector, and returns a character vector of the same length. For
colorBin(), labFormat also takes a vector of breaks of length
n but should return a character vector of length n - 1, with
the i-th element representing the interval c(x[i], x[i + 1]).
For colorQuantile, labFormat takes two arguments, the quantiles
and the associated probabilities (each of length n), and should return
a character vector of length n - 1 (similar to the colorBin()
palette). For colorFactor(), labFormat takes one argument, the
unique values of the factor, and should return a character vector of the same
length.
By default, labFormat is basically format(scientific = FALSE,
big.mark = ",") for the numeric palette, as.character() for the
factor palette, and a function to return labels of the form x[i] - x[i
+ 1] for bin and quantile palettes (in the case of quantile palettes,
x is the probabilities instead of the values of breaks).
# !formatR
library(leaflet)
# a manual legend
leaflet() %>% addTiles() %>% addLegend(
position = "bottomright",
colors = rgb(t(col2rgb(palette())) / 255),
labels = palette(), opacity = 1,
title = "An Obvious Legend"
)
# \donttest{
# an automatic legend derived from the color palette
df <- local({
n <- 300; x <- rnorm(n); y <- rnorm(n)
z <- sqrt(x ^ 2 + y ^ 2); z[sample(n, 10)] <- NA
data.frame(x, y, z)
})
pal <- colorNumeric("OrRd", df$z)
leaflet(df) %>%
addTiles() %>%
addCircleMarkers(~x, ~y, color = ~pal(z), group = "circles") %>%
addLegend(pal = pal, values = ~z, group = "circles", position = "bottomleft") %>%
addLayersControl(overlayGroups = c("circles"))
# format legend labels
df <- data.frame(x = rnorm(100), y = rexp(100, 2), z = runif(100))
pal <- colorBin("PuOr", df$z, bins = c(0, .1, .4, .9, 1))
leaflet(df) %>%
addTiles() %>%
addCircleMarkers(~x, ~y, color = ~pal(z), group = "circles") %>%
addLegend(pal = pal, values = ~z, group = "circles", position = "bottomleft") %>%
addLayersControl(overlayGroups = c("circles"))
leaflet(df) %>%
addTiles() %>%
addCircleMarkers(~x, ~y, color = ~pal(z), group = "circles") %>%
addLegend(pal = pal, values = ~z, labFormat = labelFormat(
prefix = "(", suffix = ")%", between = ", ",
transform = function(x) 100 * x
), group = "circles", position = "bottomleft" ) %>%
addLayersControl(overlayGroups = c("circles"))
# }