knitr::opts_chunk$set( collapse = TRUE, comment = "#>" )
The function leaflet()
returns a Leaflet map widget, which stores a list of objects that can be modified or updated later. Most functions in this package have an argument map
as their first argument, which makes it easy to use the pipe operator %>%
in the magrittr package, as you have seen from the example in vignette("leaflet")
.
The map widget can be initialized with certain parameters. This is achieved by populating the options
argument as shown below.
library(leaflet) library(magrittr)
# Set value for the minZoom and maxZoom settings. leaflet(options = leafletOptions(minZoom = 0, maxZoom = 18))
The leafletOptions()
can be passed any option described in the leaflet reference document. Using the leafletOptions()
, you can set a custom CRS and have your map displayed in a non spherical mercator projection as described in projections.
You can manipulate the attributes of the map widget using a series of methods. Please see the help page ?setView
for details.
setView()
sets the center of the map view and the zoom level;fitBounds()
fits the view into the rectangle [lng1, lat1]
-- [lng2, lat2]
;clearBounds()
clears the bound, so that the view will be automatically determined by the range of latitude/longitude data in the map layers if provided;Both leaflet()
and the map layer functions have an optional data
parameter that is designed to receive spatial data in one of several forms:
SpatialPoints[DataFrame]
Line
/Lines
SpatialLines[DataFrame]
Polygon
/Polygons
SpatialPolygons[DataFrame]
map()
The data
argument is used to derive spatial data for functions that need it; for example, if data
is a SpatialPolygonsDataFrame
object, then calling addPolygons
on that map widget will know to add the polygons from that SpatialPolygonsDataFrame
.
It is straightforward to derive these variables from sp objects since they always represent spatial data in the same way. On the other hand, for a normal matrix or data frame, any numeric column could potentially contain spatial data. So we resort to guessing based on column names:
lat
or latitude
(case-insensitive)lng
, long
, or longitude
You can always explicitly identify latitude/longitude columns by providing lng
and lat
arguments to the layer function.
For example, we do not specify the values for the arguments lat
and lng
in addCircles()
below, but the columns Lat
and Long
in the data frame df
will be automatically used:
# add some circles to a map df = data.frame(Lat = 1:10, Long = rnorm(10)) leaflet(df) %>% addCircles()
You can also explicitly specify the Lat
and Long
columns (see below for more info on the ~
syntax):
leaflet(df) %>% addCircles(lng = ~Long, lat = ~Lat)
A map layer may use a different data object to override the data provided in leaflet()
. We can rewrite the above example as:
leaflet() %>% addCircles(data = df) leaflet() %>% addCircles(data = df, lat = ~ Lat, lng = ~ Long)
Below are examples of using sp and maps, respectively:
library(sp) Sr1 = Polygon(cbind(c(2, 4, 4, 1, 2), c(2, 3, 5, 4, 2))) Sr2 = Polygon(cbind(c(5, 4, 2, 5), c(2, 3, 2, 2))) Sr3 = Polygon(cbind(c(4, 4, 5, 10, 4), c(5, 3, 2, 5, 5))) Sr4 = Polygon(cbind(c(5, 6, 6, 5, 5), c(4, 4, 3, 3, 4)), hole = TRUE) Srs1 = Polygons(list(Sr1), "s1") Srs2 = Polygons(list(Sr2), "s2") Srs3 = Polygons(list(Sr4, Sr3), "s3/4") SpP = SpatialPolygons(list(Srs1, Srs2, Srs3), 1:3) leaflet(height = "300px") %>% addPolygons(data = SpP) library(maps) mapStates = map("state", fill = TRUE, plot = FALSE) leaflet(data = mapStates) %>% addTiles() %>% addPolygons(fillColor = topo.colors(10, alpha = NULL), stroke = FALSE)
The arguments of all layer functions can take normal R objects, such as a numeric vector for the lat
argument, or a character vector of colors for the color
argument. They can also take a one-sided formula, in which case the formula will be evaluated using the data
argument as the environment. For example, ~ x
means the variable x
in the data object, and you can write arbitrary expressions on the right-hand side, e.g., ~ sqrt(x + 1)
.
m = leaflet() %>% addTiles() df = data.frame( lat = rnorm(100), lng = rnorm(100), size = runif(100, 5, 20), color = sample(colors(), 100) ) m = leaflet(df) %>% addTiles() m %>% addCircleMarkers(radius = ~size, color = ~color, fill = FALSE) m %>% addCircleMarkers(radius = runif(100, 4, 10), color = c('red'))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.