leaflet标签重叠修复 - leaflet :: addMarkers

12
我正在寻找一种解决方法来解决使用R函数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()
             )
2个回答

1

您可以在labelOptions中设置noHide = F而不是noHide = T

并且您可以尝试添加options = markerOptions(riseOnHover = TRUE)以使标签位于标记之上。

最终代码将是:

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()
             )

11
我认为原帖作者(和我自己)都在寻找一种能够自动移动标签的方法,以避免它们重叠。类似于ggrepel(参见http://blog.revolutionanalytics.com/2016/01/avoid-overlapping-labels-in-ggplot2-charts.html)。 - JanLauGe

0

很遗憾,我不认为在leaflet中有一个ggrepel类比。

这并不能通过将它们挪开来解决标签重叠的问题,但也许可以作为一种替代方案。这里的想法是通过仅使用参考编号为那些点制作标签,从而使标签更少侵入性。然后,将地图与包含有关这些参考编号信息的表格结合起来。我的版本可能需要一些时间来清理美学,但您应该能够理解这个想法。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接