如何在闪亮的 R 应用程序中使用传单添加控制输入?

Posted

技术标签:

【中文标题】如何在闪亮的 R 应用程序中使用传单添加控制输入?【英文标题】:How can i use the leaflet add control inputs in the shiny R app? 【发布时间】:2022-01-16 13:43:04 【问题描述】:

我想在地图内使用带有 checkboxGroupInput 的闪亮传单制作地图,并使用 checkboxGroupInput 的输入来更新用于制作地图的数据。 但我不知道如何使用这些输入,我尝试了下面的代码,但没有成功。 我会很感激任何建议。

library(shiny)
library(leaflet)


df <- data.frame(
  cat = sample(letters[1:3],10, replace = TRUE),
  long = runif(10,60,100),
  lat  = runif(10,40,60)
)

ui <- fluidPage(
  
  leafletOutput("map1")
  
)

server <- function(input, output, session) 
  
  output$map1 <- renderLeaflet(
    
    leaflet(df %>% filter(cat %in% input$x))%>%
      addTiles() %>%
      addMarkers(~long,~lat) %>%
      addControl(checkboxGroupInput(inputId = 'x',
                                    'Select cat',
                                    unique(df$cat)))
  )
  


shinyApp(ui, server)
  

【问题讨论】:

【参考方案1】:

我认为使用addLayersControl 使用图层控件更简单。您只需将addMarkersgroup 参数设置为数据框的cat 列。最后,将addLayersControl的参数overlayGroups设置为cat列的唯一值。

library(shiny)
library(leaflet)

df <- data.frame(
  cat = sample(letters[1:3],10, replace = TRUE),
  long = runif(10,60,100),
  lat  = runif(10,40,60)
)

ui <- fluidPage(  
  leafletOutput("map1")
)

server <- function(input, output, session) 
  output$map1 <- renderLeaflet(
    leaflet(df)%>%
      addTiles() %>%
      addMarkers(~long, ~lat, group = ~cat) %>%
      addLayersControl(
        overlayGroups = unique(df$cat),
        options = layersControlOptions(collapsed = FALSE)
      )
  )


shinyApp(ui, server)

每组使用不同的图标

就像在R Leaflet documentation 中一样,有许多可能的方式来拥有自定义图标。以下是您的代码之一。请注意,您需要为所有可能的类别提供一个图标。

library(shiny)
library(leaflet)

df <- data.frame(
  cat = sample(letters[1:3],10, replace = TRUE),
  long = runif(10,60,100),
  lat  = runif(10,40,60)
)

leafIcons <- icons(
  iconUrl = sapply(df$cat, function(x) switch (x, 
            "a" = "https://leafletjs.com/examples/custom-icons/leaf-green.png",
            "b" = "https://leafletjs.com/examples/custom-icons/leaf-red.png",
            "c" = "https://leafletjs.com/examples/custom-icons/leaf-orange.png"
  )),
  iconWidth = 38, iconHeight = 95,
  iconAnchorX = 22, iconAnchorY = 94,
  shadowUrl = "https://leafletjs.com/examples/custom-icons/leaf-shadow.png",
  shadowWidth = 50, shadowHeight = 64,
  shadowAnchorX = 4, shadowAnchorY = 62
)

ui <- fluidPage(
  leafletOutput("map1")
)

server <- function(input, output, session) 
  output$map1 <- renderLeaflet(
    leaflet(df)%>%
      addTiles() %>%
      addMarkers(~long, ~lat, group = ~cat, icon = leafIcons) %>%
      addLayersControl(
        overlayGroups = unique(df$cat),
        options = layersControlOptions(collapsed = FALSE)
      )
  )


shinyApp(ui, server)

【讨论】:

谢谢乔凡尼!!是否可以在您的解决方案中添加自定义标记?? 我添加了一个如何使用自定义标记的示例。

以上是关于如何在闪亮的 R 应用程序中使用传单添加控制输入?的主要内容,如果未能解决你的问题,请参考以下文章

r - 空 textInput() 导致传单闪亮应用程序出错

r - 在传单上叠加fileInput闪亮

R闪亮的导入传单html小部件对象

R传单中的标记鼠标单击事件以实现闪亮

以编程方式触发 R 传单中的标记鼠标单击事件以实现闪亮

闪亮的应用程序模块:使用传单提取在服务器函数中创建的输入