R Shiny selectInput切换时地图输出无变化问题求助
解决Shiny中selectInput切换时地图不更新的问题
你的问题核心是renderLeaflet里没有根据selectInput的选择过滤数据,直接用了完整的df_tidy数据集,所以不管选什么选项,地图都会显示全部标记。
修改方案:
在renderLeaflet函数里,通过input$Classifi_1获取当前选中的业务类型,过滤数据集后再传递给地图标记:
修改后的server代码:
server <- function(input, output) { output$mymap <- renderLeaflet({ # 根据选中的业务类型过滤数据 filtered_data <- df_tidy[df_tidy$Classifi_1 == input$Classifi_1, ] leaflet()%>% addTiles()%>% addMarkers(data = filtered_data, popup = filtered_data$Business_N) }) }
完整可运行代码:
ui <- dashboardPage( dashboardHeader(title = "Businesses in South Bend"), dashboardSidebar(), dashboardBody( fluidPage( titlePanel("Business by Type"), sidebarLayout( sidebarPanel( selectInput(inputId = 'Classifi_1', label = 'Choose Business Type', choices = unique(df_tidy$Classifi_1), selected = 'TAXI VEHICLE') ), mainPanel( tabsetPanel( tabPanel(title = 'Map', leafletOutput(outputId = 'mymap')) ) ) ) ))) server <- function(input, output) { output$mymap <- renderLeaflet({ filtered_data <- df_tidy[df_tidy$Classifi_1 == input$Classifi_1, ] leaflet()%>% addTiles()%>% addMarkers(data = filtered_data, popup = filtered_data$Business_N) }) } shinyApp(ui, server)
如果你的df_tidy是动态生成的(比如从数据库实时读取),可以把过滤逻辑放到reactive表达式里,提升重复切换时的性能:
server <- function(input, output) { # 用reactive缓存过滤后的数据,避免重复计算 filtered_data <- reactive({ df_tidy[df_tidy$Classifi_1 == input$Classifi_1, ] }) output$mymap <- renderLeaflet({ leaflet()%>% addTiles()%>% addMarkers(data = filtered_data(), popup = filtered_data()$Business_N) }) }
内容的提问来源于stack exchange,提问作者corinbog
相关产品推荐
相关产品推荐

