Erin
Erin

Reputation: 265

leaflet labels overlap fix - leaflet::addMarkers

I am looking for a fix for overlapping labels when using R function leaflet::addMarkers.

long <- c(147.768, 147.768, 147.768,147.768, 147.768, 147.768)
lat <- c(-36.852, -36.852, -36.852,-36.852, -36.852, -36.852)
label <- c('long label1', 'long label2', 'long label3','long label4', 'long label5', 'long label6')

markers <- data.frame(lat,long,label)


leaflet() %>%
  addTiles() %>%  # Add default OpenStreetMap map tiles
  addMarkers(lng=markers$long, lat= markers$lat, 
             popup="The birthplace of R",
             label = markers$label,
             labelOptions = labelOptions(noHide = T, direction = 'auto'),
            clusterOptions = markerClusterOptions()
             )

Upvotes: 13

Views: 5226

Answers (2)

Tanner33
Tanner33

Reputation: 140

Unfortunately, I do not believe there is a ggrepel analogy in leaflet.

This does not fix the overlapping labels in the sense of moving them out of the way, but perhaps, it would be an alternative. The idea here is to make the labels less invasive by simply using a reference number for those points. Then, combine the map with a table that has information about those reference numbers. My version of this could use some time to clean up the aestetics, but you get the idea, hopefully.

library(leaflet)
library(crosstalk)
library(DT)

bscols(leaflet() %>%
  addTiles() %>%  # Add default OpenStreetMap map tiles
  addCircleMarkers(lng=markers$long, lat= markers$lat, 
             popup="The birthplace of R",
             #label = markers$label,
             #labelOptions = labelOptions(noHide = T, direction = 'top'),
             clusterOptions = markerClusterOptions()) %>%
  addLabelOnlyMarkers(lng=markers$long, lat= markers$lat, 
                      label = as.character(row.names(markers)),
                      labelOptions = labelOptions(noHide = T, textOnly = T),
                      clusterOptions = markerClusterOptions()),
  datatable(markers, width = "100%"))


htmltools::save_html(test, file = "test.html")

image of code output veiwed on microsoft edge in the saved html

Upvotes: 1

ZedzDeD
ZedzDeD

Reputation: 21

You can set the noHide = F instead of noHide = T in labelOptions

And you can try adding options = markerOptions(riseOnHover = TRUE) to get the labels on top of the marker.

Final code would be :

leaflet() %>%
  addTiles() %>%  # Add default OpenStreetMap map tiles
  addMarkers(lng=markers$long, lat= markers$lat, 
             popup="The birthplace of R",
             label = markers$label,
             labelOptions = labelOptions(noHide = F, direction = 'auto'),
             options = markerOptions(riseOnHover = TRUE),
             clusterOptions = markerClusterOptions()
             )

Upvotes: 1

Related Questions