我不能让滑块输入来修改shiny中的地图。

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

我无法让地图与滑块产生反应。数据来自 https:/www.kaggle.comnasameteorite-landingsdata#当我移动滑块时,地图 "刷新",就像它自己重置一样,好像有什么东西要改变,但所有的数据点都显示在图表上。

library(shiny)
library(dplyr)
library(leaflet)
library(ggplot2)

Meteor <- read.csv()
#to take all NA values out
ReMeteor <- na.omit(Meteor) #from now on using ReMeteor instead of Meteor

ui <- shinyUI(fluidPage(

       titlePanel("Meteorite Landings"),

    # Sidebar with a sliders and checkbox
    sidebarLayout( position = "right",
        sidebarPanel(
                        #1st slider year range
                     sliderInput("years","The year the meteorite fell, or the year it was found ",
                                 min = min(ReMeteor$year),
                                 max = max(ReMeteor$year),
                                 step = 1,value = c(1399,2013),
                                 animate = TRUE),
                        #2nd slider mass range
                     sliderInput("masss","The mass of the meteorite, in grams", 
                                 min = min(ReMeteor$mass),
                                 max = max(ReMeteor$mass),
                                 step = 100,value = c(.010,60000000), 
                                 animate = TRUE),

                        #checkbox

                     selectInput("fall", 
                                        "Was meteorite seen falling or found?", 
                                        choices = sort(unique(ReMeteor$fall))),
                                         ),     


        mainPanel( leafletOutput("my_leaf",height = 650, width = 605),textOutput("text1"),textOutput("text2")


        ))))




 server <- shinyServer(function(input, output, session) {

     #i think this block of four was letting it refresh, although no changes

      filtered <- reactive({ 

          ReMeteor[ReMeteor$year >= input$years[1] & ReMeteor$year <= input$years[2],]
        ReMeteor[ReMeteor$mass >= input$masss[1] & ReMeteor$mass <= input$masss[2],]
     })
       #need last checkbox


       # filter(ReMeteor >= input$year[1] &
       #                  ReMeteor <= input$year[2]) %>%
       #       filter(ReMeteor >= input$mass[1] &
       #                  ReMeteor <= input$mass[2])%>%
       #   filter(ReMeteor = sort(unique(ReMeteor$fall)))


     # fitBounds()#here it is !!! https://rstudio.github.io/leaflet/shiny.html search : fitbounds --- this too https://rstudio.github.io/leaflet/markers.html




     output$my_leaf <- renderLeaflet({
         leaflet(data = filtered()) %>%
             addMiniMap(zoomLevelOffset = -4) %>%
             addProviderTiles("Esri.NatGeoWorldMap") 
         })
             #fitBounds(ReMeteor, ReMeteor$reclong,ReMeteor$reclat,ReMeteor$reclong,ReMeteor$reclat)


     observe({
         # year_ <-input$year
         # mass_ <-input$mass
         # fall_ <-input$fall
         # 
         leafletProxy("my_leaf", data = filtered()) %>% 
           clearShapes() %>%
           clearMarkers() %>% 
           clearPopups() %>%
                        addMarkers(lat = ReMeteor$reclat, 
                        lng = ReMeteor$reclong,
                        clusterOptions = markerClusterOptions(),
                        popup = as.character(ReMeteor$name,ReMeteor$recclass))

     })

 output$text1 <- renderText({
     paste("You have chosen a range from the year", input$years[1], "to", input$years[2])
 })

 output$text2 <- renderText({
     paste("You have chosen a range of mass from", input$masss[1], "to", input$masss[2], "grams")
 })

})

 shinyApp(ui, server)

r shiny leaflet maps
1个回答
0
投票

这里的问题是,虽然你正确地使用了反应值 filtered() 在你 leafletProxy 调用,你使用非反应版本的 ReMeteor 在你 addMarkers 呼叫。

     observe({

         leafletProxy("my_leaf", data = filtered()) %>% 
           clearShapes() %>%
           clearMarkers() %>% 
           clearPopups() %>%
                        addMarkers(lat = filtered()$reclat, 
                        lng = filtered()$reclong,
                        clusterOptions = markerClusterOptions(),
                        popup = as.character(filtered()$name,filtered()$recclass))
     })

enter image description here

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