带有checkboxGroupInput的传单地图一次仅显示两个标记

问题描述 投票:0回答:1

我正在尝试编写一个应用程序,允许用户通过 checkboxGroupInput 选择多组点,并让传单地图显示具有相应纬度/经度的关联点。我的数据框如下:

x3 = structure(list(
     species = c("Duck", "Duck", "Goose", "Goose", "Swan", "Swan"), 
     lat = c(42, 43, 47, 38, 40, 40), 
     long = c(-110, -88, -122, -77, -112, -109)), 
     row.names = c(NA, 6L), class = "data.frame")

使用此数据框,我预计每个物种会出现两个点,如果选中所有三个物种框,则最多会同时出现六个点。但是,我无法一次显示两个以上的点。如果一次只选中一个框,则这些点是正确的,但当选中两个或更多框时,会显示两个类别中每一类别的一个点,而其他点会丢失。我的代码如下:

library(shiny)
library(leaflet)

#create dataframe 
x3 = structure(list(
     species = c("Duck", "Duck", "Goose", "Goose", "Swan", "Swan"), 
     lat = c(42, 43, 47, 38, 40, 40), 
     long = c(-110, -88, -122, -77, -112, -109)), 
     row.names = c(NA, 6L), class = "data.frame")
  
#setup user interface
ui = fluidPage(
  
  titlePanel("Bird Map"),
  
  sidebarLayout(
    
    sidebarPanel = sidebarPanel(
      
      checkboxGroupInput(inputId = "species1", 
                         label = "Species", 
                         choices = list("Duck",
                                        "Goose",
                                        "Swan"),
                         selected = "Duck"),
    ),
    
 #Main panel appearance    
    mainPanel = mainPanel(
      leafletOutput(outputId = 'map')
    )
  )
)

#Reactive server function
server = function(input, output){
  map_x3 = reactive({
    x3 %>%
      filter(species == input$species1) 
  })
  
  #Leaflet map output 
  output$map = renderLeaflet({
    leaflet(map_x3()) %>%
      addTiles() %>%
      setView(lng = -90, lat = 36.2, zoom = 4)%>%
      clearShapes() %>%
      addMarkers(label = ~ species)
  })
}

#Run app
shinyApp(ui = ui, server = server)

我尝试了不同的方式来显示数据、简化的和更复杂的数据集、observe () 部分以及其他反应式表达式。问题仍然存在,尽管对于较大的数据集,我通常能够同时显示两个以上的点(尽管在选中多个框时所有点都不可见)。

r shiny r-leaflet
1个回答
0
投票

您应该将

x3 %>% filter(species == input$species1)
替换为

x3 %>% 
    dplyr::filter(species %in% input$species1) 

© www.soinside.com 2019 - 2024. All rights reserved.