Popup when hover with leaflet in R?

前端 未结 2 500
小鲜肉
小鲜肉 2021-01-31 19:18

My leaflet map looks something like this:

library(sp)
library(leaflet)
circleFun <- function(center = c(0,0),diameter = 1, npoints = 100){
  r = diameter / 2
         


        
2条回答
  •  青春惊慌失措
    2021-01-31 20:18

    This may have been added to the leaflet package since this question was posed a year ago, but this can be done via the label argument. I am using leaflet R package version 1.1.0.

    Read the data in as above:

    library(sp)
    library(leaflet)
    library(dplyr)
    
    circleFun <- function(center = c(0,0),diameter = 1, npoints = 100){
      r = diameter / 2
      tt <- seq(0,2*pi,length.out = npoints)
      xx <- center[1] + r * cos(tt)
      yy <- center[2] + r * sin(tt)
      Sr1 = Polygon(cbind(xx, yy))
      Srs1 = Polygons(list(Sr1), "s1")
      SpP = SpatialPolygons(list(Srs1), 1:1)
      return(SpP)
    }
    Circle.Town <- circleFun(c(1,-1),2.3,npoints = 100)
    
    df1 <- data.frame(long=c(0.6,1,1.4), lat=c(-2, -.8, -0.2), other=c('a', 'b', 'c'), VAM=c(10,8,6), 
      type=c('Public', 'Public', 'Private'), id=c(1:3)) %>% 
      mutate(X=paste0('id: ', 
        id,
        '
    type: ', type, '
    VAM: ', VAM)) # Create a continuous palette function pal <- colorNumeric( palette = "RdYlBu", domain = df1$VAM )

    But create a list of labels instead of vector:

    labs <- as.list(df1$X)
    

    And then lapply the HTML function over that list within the label argument. Note to use label instead of popup.

    library(htmltools)
    leaflet(height = "400px") %>% 
      addTiles() %>%
      addPolygons(data = Circle.Town, color = 'green',  fillOpacity = .7) %>%
      addCircleMarkers(data = df1, lat = ~lat, lng =~long, 
        radius = ~VAM, label = lapply(labs, HTML), 
        fillColor = ~pal(VAM),
        stroke = FALSE, fillOpacity = 0.8,
        clusterOptions = markerClusterOptions()) %>% 
      addLegend(position = "topright",
        pal = pal, values = df1$VAM,
        title = "VAM",
        opacity = 1
      ) %>% 
      setView(lng = 1, lat = -1, zoom = 8)
    

    This method is described in an an answer to this SO question: R and Leaflet: How to arrange label text across multiple lines

    There is more info on HTML in labels in leaflet documentation: https://rstudio.github.io/leaflet/popups.html

提交回复
热议问题