【问题标题】:R leaflet map - Change legends based on selected layer groupR传单地图 - 根据选定的图层组更改图例
【发布时间】:2018-06-01 10:09:06
【问题描述】:

我正在制作一张 R 传单地图(不是 Shiny),我有两个对照组,根据选择,我希望看到不同的图例。目前我只设法让两个图例始终可见。

下面是传单图的代码,输出可以看图片。

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

【问题讨论】:

    标签: r leaflet legend


    【解决方案1】:

    在您的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))
    

    【讨论】:

      【解决方案2】:

      你需要做的是,你需要让你的图例值具有反应性

      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")}
        }) 
      

      【讨论】:

      • 对于查看此答案的人:这具有将图层保持为baseGroups()(单选按钮)但仅在shiny中使用传单时的优势。
      • @Sovik Gupta:你的答案并不完全清楚。请您添加一个这样的工作示例吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-15
      • 1970-01-01
      • 1970-01-01
      • 2016-10-14
      • 1970-01-01
      相关资源
      最近更新 更多