0

I making an R Leaflet Map and I have 2 legend. how to combine them? thanks

enter image description here

Sukhi
  • 13,261
  • 7
  • 36
  • 53

1 Answers1

0

Understanding the structure of your map (str(mapObject))object in R can be a helpful starting point. This can be useful for making "aftermarket" edits to legends.

I tried this as a solution to your problem:

    # Concatenate the vectors that define each set of colors and their corresponding values:

require(spData)
require(leaflet)
require(sf)

# loading shapes of countries from the package spData

data(world)
world <- st_read(system.file("shapes/world.gpkg", package="spData"))
africa <- world[world$continent == "Africa",]
asia <- world[world$continent == "Asia", ]

asiaPal <- colorNumeric("Reds", domain = asia$pop)
africaPal <- colorNumeric("Blues", domain = africa$pop)


map <- leaflet() %>%
  addProviderTiles(providers$CartoDB.Positron) %>%
  addPolygons(data = asia,
              color = ~asiaPal(asia$pop)) %>%
  addPolygons(data = africa,
              color = ~africaPal(africa$pop)) %>%
  addLegend("bottomright", pal = asiaPal, values = asia$pop, title = "Asian Population") %>%
  addLegend("bottomright", pal = africaPal, values = africa$pop, title = "African Population")

    # Colors
    map$x$calls[[5]]$args[[1]]$colors <- 
         c(map$x$calls[[5]]$args[[1]]$colors, map$x$calls[[4]]$args[[1]]$colors)

    # Labels        
    map$x$calls[[5]]$args[[1]]$labels <-
         c(map$x$calls[[5]]$args[[1]]$labels, map$x$calls[[4]]$args[[1]]$labels)

    # Get rid of Old Legend:
    map$x$calls[[4]] <- NULL

where your legends result from elements 4 & 5 of map$x$calls.

This doesnt work very nicely. I suspect it's because these list elements are not the end result, and the elements of the map object are provided to javascript/html when rendering the map. That said, I dont know if it's easily possible to do what you are trying to achieve, without poking around in the actual HTML that results.

gvan
  • 473
  • 4
  • 15