The leaflet
package in R is a powerful tool for
creating interactive maps. It provides a simple
interface to the popular Leaflet JavaScript library, allowing R
users to create sophisticated, interactive maps with ease.
This
post explores the origins of
leaflet
, its key features, and
provides a set of map examples using the package.
{leaflet}
The leaflet
package in R is an interface to the Leaflet
JavaScript library, one of the most popular open-source libraries for
interactive maps.
It allows R users to create interactive maps with just a few lines of code, leveraging the power of Leaflet’s features.
✍️ authors → Joe Cheng, Bhaskar Karambelkar, Yihui Xie
📘 documentation → Documentation
⭐️ more than 800 stars on GitHub
To get started with leaflet
, you can install it directly
from CRAN using the install.packages
function:
The leaflet
package uses a pipe-friendly structure to
create maps. Here’s a basic example:
library(leaflet)
m <- leaflet() %>%
addTiles() %>% # Add default OpenStreetMap map tiles
addMarkers(lng = 174.768, lat = -36.852, popup = "The birthplace of R")
htmltools::save_html(m, file = "../HtmlWidget/leaflet-1.html")
In web mapping, layers represent various geographic data types. You can enhance your map’s functionality and appearance by adding different layers. Each layer can be tailored to your specific requirements, such as emphasizing certain features or data points.
To find suitable map layers, you can explore online tile providers to find the layers that suits you the best.
Here is an example using the OpenTopoMap
that we add
using the addProviderTiles()
function:
library(leaflet)
m <- leaflet() %>%
setView(lng = -71.0589, lat = 42.3601, zoom = 12) %>%
addProviderTiles(providers$OpenTopoMap)
htmltools::save_html(m, file = "../HtmlWidget/leaflet-2.html")
Markers are used to pinpoint specific locations on a map, often with additional information such as labels or popups. They are useful for highlighting points of interest, such as cities, landmarks, or events.
In the following code:
addTiles()
: Adds the
default basemap tiles to the map.
addMarkers()
: Places markers at the specified
longitude and
latitude coordinates.
lng
and lat
:
Vectors specifying the longitude and latitude
of the markers.
popup
: A vector of strings that
appear when the marker is clicked, providing additional
information about each location.
Example of adding markers with Leaflet:
m <- leaflet() %>%
addTiles() %>%
addMarkers(
lng = c(-118.2437, -74.0060), lat = c(34.0522, 40.7128),
popup = c("Los Angeles, CA", "New York City, NY")
)
htmltools::save_html(m, file = "../HtmlWidget/leaflet-3.html")
Because Leaflet is an HTML widget (it generates html code), you can easily add your own HTML/CSS code to your cards, allowing you to customise them as much as you like.
Title Styling:
title
variable defines HTML and CSS to style a
title element.
.custom-title
sets the text color,
shadow effects, and background with transparency. It also applies
padding and rounded corners.
<h1>
tag within
title
displays the text “Boston” with the defined
styling.
Legend Styling:
legend
variable contains HTML and CSS for a
legend box.
.custom-legend
class styles the legend with a
semi-transparent white background, padding, and a border. It also
has rounded corners and a hover effect that slightly enlarges the
box and changes its background color.
legend
includes a paragraph with a
link to Wikipedia about Boston and a brief description of the
city.
library(leaflet)
library(htmltools)
# Define HTML with advanced CSS styling
title <- "
<style>
.custom-title {
color: #34495e;
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.2);
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.5);
background-color: rgba(204, 224, 255, 0.9);
padding: 12px;
border-radius: 8px;
transition: background-color 0.3s, box-shadow 0.3s;
}
.custom-title:hover {
background-color: rgba(204, 224, 255, 0.7);
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);
}
</style>
<h1>
Bostom
</h1>"
legend <- "
<style>
.custom-legend {
background-color: rgba(255, 255, 255, 0.8);
padding: 10px;
border-radius: 5px;
border: 1px solid #ddd;
transition: background-color 0.3s, transform 0.3s;
width: 300px;
}
.custom-legend:hover {
background-color: rgba(255, 255, 255, 0.9);
transform: scale(1.05);
}
</style>
<div>
<p>
<a href='https://en.wikipedia.org/wiki/Boston' target='_blank'>Boston</a> is the capital city of Massachusetts and a major city in the northeastern United States. It's known for its rich history, being a center of the American Revolution, and its significant contributions to education, with institutions like Harvard University and MIT. It also has a prominent role in finance, technology, and healthcare.
</p>
</div>"
# Create the map
m <- leaflet() %>%
addTiles() %>%
addProviderTiles(providers$OpenTopoMap) %>%
setView(lng = -71.0589, lat = 42.3601, zoom = 12) %>%
addControl(html = title, position = "topright", className = "custom-title") %>%
addControl(html = legend, position = "bottomleft", className = "custom-legend") %>%
addPopups(lng = -71.0589, lat = 42.3601, popup = "Boston", options = popupOptions(closeButton = FALSE))
# Save the map
htmltools::save_html(m, file = "../HtmlWidget/leaflet-4.html")
The examples from the gallery will help you understand the
capabilities of the leaflet
package and
how to use it in concrete cases.
👋 After crafting hundreds of R charts over 12 years, I've distilled my top 10 tips and tricks. Receive them via email! One insight per day for the next 10 days! 🔥