library(mxmaps)
library(leaflet) # for colorNumeric
df_mxmunicipio_2020$value <- df_mxmunicipio_2020$indigenous_language /
df_mxmunicipio_2020$pop
#Viridis color scheme
magma <- c("#000004FF", "#1D1146FF", "#50127CFF", "#822681FF", "#B63779FF",
"#E65163FF", "#FB8761FF", "#FEC387FF", "#FCFDBFFF")
pal <- colorNumeric(magma, domain = df_mxmunicipio_2020$value)
mxmunicipio_leaflet(df_mxmunicipio_2020,
pal,
~ pal(value),
~ sprintf("State: %s<br/>Municipio : %s<br/>Percent Indigenous: %s%%",
state_name, municipio_name, round(value * 100, 1))) %>%
addLegend(position = "bottomright",
pal = pal,
values = df_mxmunicipio_2020$value,
title = "Percent<br>Indigenous<br>Speaking",
labFormat = labelFormat(suffix = "%",
transform = function(x) {100 * x})) %>%
addProviderTiles("CartoDB.Positron")
You can also subset the data to only show certain municipios
library("dplyr")
library("geojsonio")
library("jsonlite")
library("sf")
library("RColorBrewer")
library("leaflet")
df <- df_mxmunicipio_2020 %>%
as.data.frame() %>%
filter(metro_area %in% c("Valle de México", "Toluca", "Puebla-Tlaxcala"))
df$value <- df$indigenous /df$pop
Reds <- c("white", brewer.pal(4, "RdYlBu"))
pal <- colorNumeric(Reds, domain = df$value)
mxmunicipio_leaflet(df,
pal,
~ pal(value),
opacity = 0.8,
fillOpacity = 0.8,
zoom = df$region,
popup = sprintf("State: %s<br/>Municipio : %s<br/>Value: %s%%",
df$state_name,
df$municipio_name,
round(df$value * 100, 1))) %>%
addLegend(position = "bottomright", pal = pal,
values = df$value) %>%
addProviderTiles("CartoDB.Positron")
or you can subset the topoJSON directly
# Convert the topoJSON to spatial object
tmpdir <- tempdir()
# have to use RJSONIO or else the topojson isn't valid
write(RJSONIO::toJSON(mxmunicipio.topoJSON), file.path(tmpdir, "mun.topojson"))
muns <- topojson_read(file.path(tmpdir, "mun.topojson"))
# municipios that make up Monterrey
monterrey <- muns[muns$id %in%
df_mxmunicipio_2020$region[df_mxmunicipio_2020$metro_area == "Monterrey"], ]
# Convert to SpatialDataFrame
monterrey <- as_Spatial(monterrey)
# made-up data
monterrey@data$rand <- 1:nrow(monterrey@data)
# Create a continuous palette function
pal <- colorNumeric(
palette = "Blues",
domain = monterrey@data$rand
)
leaflet(monterrey) %>%
addPolygons(stroke = FALSE, smoothFactor = 0.2, fillOpacity = 1,
color = ~pal(monterrey@data$rand)
)%>%
addProviderTiles("CartoDB.Positron")