init
This commit is contained in:
commit
116abafc09
58 changed files with 5749 additions and 0 deletions
190
vignettes/data-viz-basemaps.Rmd
Normal file
190
vignettes/data-viz-basemaps.Rmd
Normal file
|
|
@ -0,0 +1,190 @@
|
|||
---
|
||||
title: "Basemaps for Data Visualization"
|
||||
output: rmarkdown::html_vignette
|
||||
vignette: >
|
||||
%\VignetteIndexEntry{Basemaps for Data Visualization}
|
||||
%\VignetteEngine{knitr::rmarkdown}
|
||||
%\VignetteEncoding{UTF-8}
|
||||
---
|
||||
|
||||
```{r, include = FALSE}
|
||||
knitr::opts_chunk$set(
|
||||
collapse = TRUE,
|
||||
comment = "#>",
|
||||
eval = FALSE
|
||||
)
|
||||
```
|
||||
|
||||
*Note: Code examples are not evaluated in this vignette. Copy and run them in your R console to see the interactive maps.*
|
||||
|
||||
## Introduction
|
||||
|
||||
When overlaying data on maps, busy basemaps can distract from your visualization. This vignette shows how to create minimal, muted basemaps that let your data stand out.
|
||||
|
||||
## Ultra-Minimal: Land and Water Only
|
||||
|
||||
Strip everything except land and water boundaries using `pmMinimal()`:
|
||||
|
||||
```{r}
|
||||
library(leaflet)
|
||||
library(protomapr)
|
||||
|
||||
# Using the convenience function - just two lines!
|
||||
leaflet() %>%
|
||||
setView(lng = -122.4, lat = 37.8, zoom = 10) %>%
|
||||
addProtomaps(url = protomaps_url(), style = pmMinimal())
|
||||
|
||||
# Custom colors
|
||||
leaflet() %>%
|
||||
setView(lng = -122.4, lat = 37.8, zoom = 10) %>%
|
||||
addProtomaps(
|
||||
url = protomaps_url(),
|
||||
style = pmMinimal(land = "#f5f5f0", water = "#c8dce8")
|
||||
)
|
||||
```
|
||||
|
||||
## Subtle Context: Faint Roads
|
||||
|
||||
Keep roads barely visible for orientation without distraction:
|
||||
|
||||
```{r}
|
||||
leaflet() %>%
|
||||
setView(lng = -73.98, lat = 40.75, zoom = 12) %>%
|
||||
addProtomaps(
|
||||
url = protomaps_url(),
|
||||
colors = pmColors(
|
||||
background = "#ffffff",
|
||||
earth = "#fafafa",
|
||||
water = "#f0f4f8",
|
||||
# Muted land use
|
||||
park = "#f5f7f5",
|
||||
wood = "#f5f7f5",
|
||||
scrub_a = "#fafafa",
|
||||
scrub_b = "#fafafa",
|
||||
glacier = "#fafafa",
|
||||
sand = "#fafafa",
|
||||
beach = "#fafafa",
|
||||
hospital = "#fafafa",
|
||||
school = "#fafafa",
|
||||
industrial = "#fafafa",
|
||||
pedestrian = "#fafafa",
|
||||
zoo = "#fafafa",
|
||||
military = "#fafafa",
|
||||
aerodrome = "#fafafa",
|
||||
# Faint roads - just slightly darker than background
|
||||
highway = "#e8e8e8",
|
||||
major = "#efefef",
|
||||
medium = "#f5f5f5",
|
||||
minor = "#fafafa",
|
||||
link = "#fafafa",
|
||||
other = "#fafafa",
|
||||
railway = "#f0f0f0",
|
||||
pier = "#fafafa",
|
||||
boundary = "#fafafa",
|
||||
buildings = "#fafafa"
|
||||
),
|
||||
labelRules = list()
|
||||
)
|
||||
```
|
||||
|
||||
## Dark Mode for Bright Data
|
||||
|
||||
Dark basemaps make colorful data points pop. Use the `minimal-dark` preset:
|
||||
|
||||
```{r}
|
||||
leaflet() %>%
|
||||
setView(lng = -122.4, lat = 37.8, zoom = 11) %>%
|
||||
addProtomaps(url = protomaps_url(), style = pmStyle("minimal-dark"))
|
||||
```
|
||||
|
||||
## Muted with Major Labels Only
|
||||
|
||||
Sometimes you need city names for context but nothing else. Use `pmMinimal()` with `labels = TRUE`:
|
||||
|
||||
```{r}
|
||||
leaflet() %>%
|
||||
setView(lng = -100, lat = 40, zoom = 4) %>%
|
||||
addProtomaps(
|
||||
url = protomaps_url(),
|
||||
style = pmMinimal(land = "#f5f5f0", water = "#d4e4ed", labels = TRUE)
|
||||
)
|
||||
|
||||
# Or use the "muted" preset which includes subtle roads and labels
|
||||
leaflet() %>%
|
||||
setView(lng = -100, lat = 40, zoom = 4) %>%
|
||||
addProtomaps(url = protomaps_url(), style = pmStyle("muted"))
|
||||
```
|
||||
|
||||
## Choropleth-Friendly: No Fill Competition
|
||||
|
||||
For choropleth maps, you want boundaries visible but no competing fill colors:
|
||||
|
||||
```{r}
|
||||
leaflet() %>%
|
||||
setView(lng = -98, lat = 38, zoom = 4) %>%
|
||||
addProtomaps(
|
||||
url = protomaps_url(),
|
||||
colors = pmColors(
|
||||
background = "#ffffff",
|
||||
earth = "#ffffff",
|
||||
water = "#ffffff",
|
||||
# Hide all land use
|
||||
park = "#ffffff",
|
||||
wood = "#ffffff",
|
||||
scrub_a = "#ffffff",
|
||||
scrub_b = "#ffffff",
|
||||
glacier = "#ffffff",
|
||||
sand = "#ffffff",
|
||||
beach = "#ffffff",
|
||||
hospital = "#ffffff",
|
||||
school = "#ffffff",
|
||||
industrial = "#ffffff",
|
||||
pedestrian = "#ffffff",
|
||||
zoo = "#ffffff",
|
||||
military = "#ffffff",
|
||||
aerodrome = "#ffffff",
|
||||
# Hide roads
|
||||
highway = "#ffffff",
|
||||
major = "#ffffff",
|
||||
medium = "#ffffff",
|
||||
minor = "#ffffff",
|
||||
link = "#ffffff",
|
||||
other = "#ffffff",
|
||||
railway = "#ffffff",
|
||||
pier = "#ffffff",
|
||||
buildings = "#ffffff",
|
||||
# Keep boundaries visible
|
||||
boundary = "#cccccc"
|
||||
),
|
||||
labelRules = list(
|
||||
pmLabelRule("places", pmCenteredTextSymbolizer(
|
||||
font = "600 11px sans-serif",
|
||||
fill = "#333333",
|
||||
stroke = "#ffffff",
|
||||
width = 2
|
||||
), filter = "feature.props.kind === 'region'")
|
||||
)
|
||||
)
|
||||
```
|
||||
|
||||
## Watercolor Style
|
||||
|
||||
Soft, hand-drawn aesthetic using the `watercolor` preset:
|
||||
|
||||
```{r}
|
||||
leaflet() %>%
|
||||
setView(lng = -122.4, lat = 37.8, zoom = 12) %>%
|
||||
addProtomaps(url = protomaps_url(), style = pmStyle("watercolor"))
|
||||
```
|
||||
|
||||
## Tips for Data Visualization Basemaps
|
||||
|
||||
1. **Match your data colors**: If your data uses warm colors, use cool-toned basemaps (and vice versa)
|
||||
|
||||
2. **Consider accessibility**: Ensure sufficient contrast between your data and basemap
|
||||
|
||||
3. **Remove labels when zoomed in**: Dense point data doesn't need city labels competing for attention
|
||||
|
||||
4. **Use transparency**: Leaflet markers and shapes can use alpha values to blend with basemaps
|
||||
|
||||
5. **Test at all zoom levels**: A basemap that works at zoom 10 may be too busy at zoom 15
|
||||
Loading…
Add table
Add a link
Reference in a new issue