Add a legend for the sizing of symbols or the width of lines
Usage
addLegendSize(
map,
pal,
values,
title = NULL,
labelStyle = "vertical-align: middle;",
shape = "rect",
orientation = c("vertical", "horizontal"),
color,
fillColor = color,
strokeWidth = 1,
opacity = 1,
fillOpacity = opacity,
breaks = 5,
baseSize = 20,
minSize = NULL,
maxSize = NULL,
numberFormat = function(x) {
prettyNum(x, big.mark = ",", scientific = FALSE,
digits = 1)
},
group = NULL,
className = "info legend leaflet-control",
stacked = FALSE,
data = leaflet::getMapData(map),
...
)
addLegendLine(
map,
pal,
values,
title = NULL,
labelStyle = "vertical-align: middle;",
orientation = c("vertical", "horizontal"),
width = 20,
color,
opacity = 1,
fillOpacity = opacity,
breaks = 5,
baseSize = 10,
minSize = NULL,
maxSize = NULL,
numberFormat = function(x) {
prettyNum(x, big.mark = ",", scientific = FALSE,
digits = 1)
},
group = NULL,
className = "info legend leaflet-control",
data = leaflet::getMapData(map),
...
)
addLegendSymbol(
map,
pal,
values,
title = NULL,
labelStyle = "vertical-align: middle;",
shape,
orientation = c("vertical", "horizontal"),
color,
fillColor = color,
strokeWidth = 1,
opacity = 1,
fillOpacity = opacity,
width = 20,
height = width,
group = NULL,
className = "info legend leaflet-control",
dashArray = NULL,
label = NULL,
data = leaflet::getMapData(map),
...
)
addLegendText(
map,
pal,
values,
text,
labels = NULL,
title = NULL,
labelStyle = "vertical-align: middle;",
orientation = c("vertical", "horizontal"),
color,
fillColor = color,
opacity = 1,
fillOpacity = opacity,
width = 20,
height = width,
fontSize = round(min(width, height) * 0.6),
fontFamily = NULL,
group = NULL,
className = "info legend leaflet-control",
data = leaflet::getMapData(map),
...
)
addLegendTextSize(
map,
pal,
values,
text,
title = NULL,
labelStyle = "vertical-align: middle;",
orientation = c("vertical", "horizontal"),
color,
fillColor = color,
opacity = 1,
fillOpacity = opacity,
breaks = 5,
baseSize = 20,
numberFormat = function(x) {
prettyNum(x, big.mark = ",", scientific = FALSE,
digits = 1)
},
fontFamily = NULL,
group = NULL,
className = "info legend leaflet-control",
data = leaflet::getMapData(map),
...
)Arguments
- map
a map widget object created from 'leaflet'
- pal
the color palette function, generated from colorNumeric
- values
the values used to generate sizes and if colorValues is not specified and pal is given, then the values are used to generate colors from the palette function
- title
the legend title, pass in HTML to style
- labelStyle
character string of style argument for HTML text
- shape
the desired shape of the symbol, See availableShapes
- orientation
stack the legend items vertically or horizontally
- color
the color of the legend symbols, if omitted pal is used
- fillColor
fill color of symbol
- strokeWidth
width of symbol outline
- opacity
opacity of the legend items
- fillOpacity
fill opacity of the legend items
- breaks
an integer specifying the number of breaks or a numeric vector of the breaks. if a named vector is given, the names are used as labels
- baseSize
re-scaling size in pixels of the mean of the values, the average value will be this exact size
- minSize
minimum size in pixels of a symbol; values that would scale below this are clamped to
minSize;baseSizemust be greater thanminSize- maxSize
maximum size in pixels of a symbol; values that would scale above this are clamped to
maxSize;baseSizemust be less thanmaxSize- numberFormat
formatting functions for numbers that are displayed e.g. format, prettyNum
- group
group name of a leaflet layer group
- className
extra CSS class to append to the control, space separated
- stacked
If
TRUE, symbols are overlayed onto each other for a more compact size legend- data
a data object. Currently supported objects are matrices, data frames, spatial objects from the sp package (
SpatialPoints,SpatialPointsDataFrame,Polygon,Polygons,SpatialPolygons,SpatialPolygonsDataFrame,Line,Lines,SpatialLines, andSpatialLinesDataFrame), and spatial data frames from the sf package.- ...
arguments to pass to addControl for addLegendSize, addLegendLine, addLegendSymbol, addLegendText, and addLegendTextSize
- width
width in pixels of the lines
- height
in pixels
- dashArray
a string or vector/list of strings that defines the stroke dash pattern
- label
a character vector of labels to display at the center of each symbol
- text
character vector of labels to render inside each symbol. For addLegendText, length must match the number of unique values; if omitted the levels themselves are used. For addLegendTextSize, required and must be a single string, which is rendered at each break size.
- labels
optional character vector of labels to display beside each text symbol in addLegendText; length must match the number of unique values. If
NULL(the default) no labels are added and only the symbols are shown.- fontSize
size of the text in pixels for addLegendText; defaults to
round(min(width, height) * 0.6)- fontFamily
optional font family for the svg text; if
NULLthe browser default is used
Value
an object from addControl
Examples
library(leaflet)
data("quakes")
quakes <- quakes[1:100,]
numPal <- colorNumeric('viridis', quakes$depth)
sizes <- sizeNumeric(quakes$depth, baseSize = 10)
symbols <- Map(
makeSymbol,
shape = 'triangle',
color = numPal(quakes$depth),
width = sizes,
height = sizes
)
leaflet() %>%
addTiles() %>%
addMarkers(data = quakes,
icon = icons(iconUrl = symbols),
lat = ~lat, lng = ~long) %>%
addLegendSize(
values = quakes$depth,
pal = numPal,
title = 'Depth',
labelStyle = 'margin: auto;',
shape = c('triangle'),
orientation = c('vertical', 'horizontal'),
opacity = .7,
breaks = 5)
# a wrapper for making icons is provided
sizeSymbols <-
makeSymbolsSize(
quakes$depth,
shape = 'cross',
fillColor = numPal(quakes$depth),
color = 'black',
strokeWidth = 1,
opacity = .8,
fillOpacity = .5,
baseSize = 20
)
leaflet() %>%
addTiles() %>%
addMarkers(data = quakes,
icon = sizeSymbols,
lat = ~lat, lng = ~long) %>%
addLegendSize(
values = quakes$depth,
pal = numPal,
title = 'Depth',
shape = 'cross',
orientation = 'horizontal',
strokeWidth = 1,
opacity = .8,
fillOpacity = .5,
color = 'black',
baseSize = 20,
breaks = 5)
# Group layers control
leaflet() %>%
addTiles() %>%
addLegendSize(
values = quakes$depth,
pal = numPal,
title = 'Depth',
labelStyle = 'margin: auto;',
shape = c('triangle'),
orientation = c('vertical', 'horizontal'),
opacity = .7,
breaks = 5,
group = 'Depth') %>%
addLayersControl(overlayGroups = c('Depth'))
# Polyline Legend for Size
baseSize <- 10
lineColor <- '#00000080'
pal <- colorNumeric('Reds', atlStorms2005$MinPress)
leaflet() %>%
addTiles() %>%
addPolylines(data = atlStorms2005,
weight = ~sizeNumeric(values = MaxWind, baseSize = baseSize),
color = ~pal(MinPress),
popup = ~as.character(MaxWind)) %>%
addLegendLine(values = atlStorms2005$MaxWind,
title = 'MaxWind',
baseSize = baseSize,
width = 50,
color = lineColor) %>%
addLegendNumeric(pal = pal,
title = 'MinPress',
values = atlStorms2005$MinPress)
#> Warning: GDAL Error 1: Can't load requested DLL: C:\Program Files\GDAL\gdalplugins\ogr_MSSQLSpatial.dll
#> 126: The specified module could not be found.
#> Warning: GDAL Error 1: Can't load requested DLL: C:\Program Files\GDAL\gdalplugins\ogr_MSSQLSpatial.dll
#> 126: The specified module could not be found.
#> Warning: GDAL Error 1: Can't load requested DLL: C:\Program Files\GDAL\gdalplugins\ogr_MSSQLSpatial.dll
#> 126: The specified module could not be found.
#> Warning: GDAL Error 1: Can't load requested DLL: C:\Program Files\GDAL\gdalplugins\ogr_MSSQLSpatial.dll
#> 126: The specified module could not be found.
# Stacked Legends
leaflet(quakes) %>%
addTiles() %>%
addSymbolsSize(values = ~10^(mag),
lat = ~lat,
lng = ~long,
shape = 'circle',
color = 'black',
fillColor = 'red',
opacity = 1,
baseSize = 5) %>%
addLegendSize(
values = ~10^(mag),
title = 'Magnitude',
baseSize = 5,
shape = 'circle',
color = 'black',
fillColor = 'red',
labelStyle = 'font-size: 18px;',
position = 'bottomleft',
stacked = TRUE,
breaks = 5)
# Text legend (categorical)
quakes$grp <- sample(c('A', 'B', 'C'), nrow(quakes), replace = TRUE)
grpPal <- colorFactor('Dark2', quakes$grp)
leaflet(quakes) %>%
addTiles() %>%
addText(lng = ~long, lat = ~lat, text = ~grp,
color = 'white', fillColor = ~grpPal(grp), width = 20) %>%
addLegendText(pal = grpPal, values = ~grp, title = 'Group',
labels = c('Group A', 'Group B', 'Group C'),
position = 'topright', fontFamily = 'sans-serif')
# Text size legend (auto-computed font size)
leaflet(quakes) %>%
addTiles() %>%
addTextSize(lng = ~long, lat = ~lat,
text = ~as.character(round(mag, 1)),
values = ~mag, color = 'black', fillColor = 'yellow',
baseSize = 30) %>%
addLegendTextSize(pal = colorNumeric('viridis', quakes$mag),
values = ~mag, text = 'M', title = 'Magnitude',
baseSize = 30, breaks = 5,
position = 'bottomright')
# dashed lines
leaflet() %>%
addTiles() %>%
addLegendSymbol(color='black', dashArray = list("none", "24"),
shape = c("line", "line"), values = c('solid', 'dashed'),
strokeWidth = 10, height = 20, width = 100)
#advanced shape customization, aesthetic arguments are propogated if
# vectors are equal length or of size 1
defaultShapes <- availableShapes()[["default"]]
leaflet() %>%
addTiles() %>%
addLegendSymbol(
shape = defaultShapes,
color = "black",
fillColor =
colorRampPalette(c("blue", "yellow"))(length(defaultShapes)),
width = seq(1L, length(defaultShapes), 1L) * length(defaultShapes),
values = factor(defaultShapes, defaultShapes),
strokeWidth = 2
)
# label centered inside each legend symbol
leaflet() %>%
addTiles() %>%
addLegendSymbol(
shape = c('circle', 'circle', 'circle'),
color = 'black',
fillColor = c('red', 'blue', 'green'),
fillOpacity = 0.8,
values = c('A', 'B', 'C'),
label = c('A', 'B', 'C'),
width = 24
)
