R小册子映射 - 根据选定的图层组更改图例

时间:2018-06-01 10:09:07

标签: r leaflet legend

我正在制作一个R小册子地图(不是Shiny),我有两个控制组,根据选择,我想要一个不同的图例变得可见。目前我只能设法让两个传说都可见。

下面是传单地图的代码,输出可以在图像中看到。

Two legends are always visible

leaflet() %>% addSearchOSM() %>% 
  addProviderTiles(providers$CartoDB.Positron,
                   options = providerTileOptions(noWrap = TRUE),
                   group = "kaart") %>%
  # addFullscreenControl() %>%
  addCircleMarkers(data = table@data,
             lat = ~lng, 
             lng = ~lat,
             color = ~palverbruikplaats(Verbruiksplaats),
             label = bepaalPopup(),
             group = "Verbruikplaatscircles"
             )%>%
  addCircleMarkers(data = table@data,
                   lat = ~lng, 
                   lng = ~lat,
                   color = ~palstatus(`Status omschrijving`),
                   label = bepaalPopup(),
                   group = "statuscircles"
                    )%>%
  leaflet::addLegend("bottomleft", pal = palverbruikplaats, values = verbruikplaatsuniek, title = "Legenda") %>%
  leaflet::addLegend("bottomleft", pal = palstatus, values = statusuniek, title = "Legenda") %>%
  addLayersControl(baseGroups = c("Verbruikplaatscircles", "statuscircles"),
                      options = layersControlOptions(collapsed = FALSE))

2 个答案:

答案 0 :(得分:2)

在您的addLayersControl中,您的意思是设置overlayGroups参数而不是baseGroups吗?

library(leaflet)
leaflet() %>%
  addTiles(group = "OpenStreetMap") %>%
  addCircleMarkers(runif(20, -75, -74), runif(20, 41, 42), group = "Markers1", color ="red") %>%
  addMarkers(runif(20, -75, -74), runif(20, 41, 42), group = "Markers2") %>%
  addLegend(values = 1, group = "Markers1", position = "bottomleft", labels = "1", colors= "red") %>%
  addLegend(values = 2, group = "Markers2", position = "bottomleft", labels = "2" ,colors= "blue") %>%  
  addLayersControl(overlayGroups = c("Markers1", "Markers2"),
                   options = layersControlOptions(collapsed = FALSE))

enter image description here

答案 1 :(得分:0)

你需要做的是,你需要让你的传说值反应

addLegend("bottomright", pal = pal, values = maindata@data[,req_var1()],

你可以在调用

之前在服务器中声明req_var1()
req_var1<-reactive({if(input$`Comparison Metric`=="Current Territory Factors vs GeoProxy Smoothing"){
    paste(input$Curr2,"Curr",sep="_")
  } else if(input$`Comparison Metric`=="Current Written Premium Vs Indicated Written Premium"){
    paste(input$Curr2,"CWP",sep="_")
  }
  }) 

并且朋友也可以声明为

pal1 <- reactive({if(input$ColorType=="Percentile"){

    colorQuantile(
    palette = "Spectral",
    domain = tempdata()@data[,req_var1()],
    probs = if(input$`Comparison Metric`=="Current Territory Factors vs GeoProxy Smoothing"){seq(0,1,by=0.25)
    } else if(input$`Comparison Metric`=="Current Written Premium Vs Indicated Written Premium"){
      seq(0,1,by=0.5)
    }
    ## In case of Current written premium the variation is very less so while executing color mapping code is throwing error.
    ## This is because the some of quantiles values are not differentiable.
    ## So in colorQuantile function we have given two different prob values depending on metric selection.
    ) 
  } else if(input$ColorType=="Absolute Value"){colorNumeric(
    palette = "Spectral",
    domain = tempdata()@data[,req_var1()])
  }else{print("Plese select Any one color map")}
  })