如何在闪亮的 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
使用图层控件更简单。您只需将addMarkers
的group
参数设置为数据框的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 应用程序中使用传单添加控制输入?的主要内容,如果未能解决你的问题,请参考以下文章