Search code examples
rleafletlabelr-leaflet

R Leaflet Label Set direction


Please have a look at the below example code, I would like to use the label direction (MyDirection), which is stored in df to have different label directions within my map.

I can set every label to a specific direction like direction = "top", but somehow its not working if I specify direction = ~MyDirection.

Any Idea/solution would be much appreciated.

Thanks in advance.

library(leaflet)

df  <- read.csv(textConnection("
Name,Lat,Long,MyDirection
ANN,51.19,4.46277778,right
BAB,43.26306,-2.94972222,left
BCN,41.29694,2.07833333,top
BCN,41.29694,2.07833333,bottom
"))

#---Create Map----
m <- leaflet(df) %>% 
     addTiles(group = "OSM (default)") %>%
     addCircles(~Long, ~Lat,
                 label = ~htmlEscape(Name), 
                 labelOptions = labelOptions(noHide = T, 
                                              #direction = "top",
                                              #direction = "bottom",
                                              #direction = "left",
                                              #direction = "right",
                                              direction = ~MyDirection))

m

Solution

  • I would like to share my latest approach. I finally managed to set the label direction based on mydf$MyDirection. Instead of adding multiple layers, as i did in my previous example, I used the library "Purrr". This reduces the amount of layers tremendously.

    Best Regards

    #Libraries----
    library(leaflet)
    library(htmltools)
    library(htmlwidgets)
    library(purrr)
    #---Data Input----
    mydf  <- read.csv(textConnection("
    Facility,Lat,Long,MyDirection
    ANN,51.19,4.46277778,right
    BAB,43.26306,-2.94972222,left
    BCN,41.29694,2.07833333,top
    BCN2,41.29694,2.07833333,bottom
    "))
    
    #---Create Vector----
    ob_Facility <- mydf %>% 
      split(., .$Facility)
    #---Create Map----
    m <- leaflet() %>% 
      addTiles() 
    
    #---Purrr Layers----
    names(ob_Facility) %>%
      purrr::walk(function(mydf) {
        m <<- m %>%
          addCircleMarkers(data=ob_Facility[[mydf]],
                           lng=~Long, lat=~Lat,
                           group = "Show All",
                           label = ~Facility,
                           labelOptions = labelOptions(noHide = T,direction = ~MyDirection))
      })
    
    #---Layers control----
    m %>%
      addLayersControl(
        overlayGroups = "Show All",
        options = layersControlOptions(collapsed = FALSE)  
      )%>%
      #---Save as HTML File----
    saveWidget('Example Go Live Date.html', selfcontained = TRUE)