Связывание слайдера, листовки и точечного графика - PullRequest
0 голосов
/ 12 февраля 2019

Я хочу связать числовой вход слайдера с графиком рассеяния и картой листовки таким образом, чтобы при выборе диапазона входных данных из входного слайдера маркеры на карте отфильтровывались, а график рассеяния исчезал в зависимости от выбора. Код нижепривязывает только ползунки к карте, но не к точечной диаграмме.Я хочу иметь возможность связать 3 компонента;карта, точечная диаграмма и слайдер Input.

library(shiny
library(leaflet)
library(rgdal)
library(ggplot2)
geo<-readOGR(dsn = path.expand("./www/map"),layer = "geo")
geo1<-geo@data
ui<-fluidPage(
fluidRow(
          column(4,
                 sliderInput(inputId = "os1",
                             label = "Offsite Sanitation(Sewarage):",
                             min = min(geo1$Offst_S,na.rm =T),
                             max = max(geo1$Offst_S,na.rm =T),
                             value = c(min(geo1$Offst_S,na.rm =T),
                                       max(geo1$Offst_S,na.rm =T))
                 ),
                 sliderInput(inputId = "os2",
                             label = "Onsite Sanitation:",
                             min = min(geo1$Onst_Sn,na.rm =T),
                             max = max(geo1$Onst_Sn,na.rm =T),
                             value = c(min(geo1$Onst_Sn,na.rm =T),
                                       max(geo1$Onst_Sn,na.rm =T))
                 ),
                 sliderInput(inputId = "wt",
                             label = "Waste Water Treated(Safely Managed):",
                             min = min(geo1$WW_trtd,na.rm =T),
                             max = max(geo1$WW_trtd,na.rm =T),
                             value = c(min(geo1$WW_trtd,na.rm =T),
                                       max(geo1$WW_trtd,na.rm =T))
                 ),

                 sliderInput(inputId = "fce",
                             label = "Feacal Sludge Contained Not Emptied(Safely Managed):",
                             min = min(geo1$FS_cn__,na.rm =T),
                             max = max(geo1$FS_cn__,na.rm =T),
                             value = c(min(geo1$FS_cn__,na.rm =T),
                                       max(geo1$FS_cn__,na.rm =T))
                 ),

                 sliderInput(inputId = "ft",
                             label = "Feacal Sludge Treated(Safely Managed):",
                             min = min(geo1$FS_trtd,na.rm =T),
                             max = max(geo1$FS_trtd,na.rm =T),
                             value = c(min(geo1$FS_trtd,na.rm =T),
                                       max(geo1$FS_trtd,na.rm =T))
                 )
          )

),
column(4,
                 leafletOutput("leaf")  

          ),
column(4,plotOutput("plot")

)
        )

server<-function(input,output,session){
#reactive function for slider input
san<-reactive({
    subset(geo1,geo1$Offst_S>=input$os1[1]&
             geo1$Offst_S<=input$os1[2]&
             geo1$Onst_Sn>=input$os2[1]&
             geo1$Onst_Sn<=input$os2[2]&
             geo1$WW_trtd>=input$wt[1]&
             geo1$WW_trtd<=input$wt[2]&
             geo1$FS_cn__>=input$fce[1]&
             geo1$FS_cn__<=input$fce[2]&
             geo1$FS_trtd>=input$ft[1]&
             geo1$FS_trtd<=input$ft[2]




    )
  })

#base map for interactive mapping
  output$leaf<-renderLeaflet({


    leaflet(geo1)%>%

      #addTiles()%>%

      addProviderTiles("Esri.NatGeoWorldMap")%>% 
      addAwesomeMarkers(
        data=geo1,
        label = ~ City

      )
  }

  )

  #observe function for slider input numeric options
  observe({


    leafletProxy("leaf2",data=san()) %>%

      #Initializing the map
      clearMarkers() %>%
      clearControls() %>%
      #clearShapes()%>%
      addAwesomeMarkers(
        #fillColor=~pal(input$os1),
        label = ~City

      ) 

  })




  #plot explorer 
  output$plot<-renderPlot({
    #xvar<-geo1[,c(input$x)]
    #yvar<-geo1[,c(input$y)]

         data_plot<-subset(geo1, geo1$Offst_S>=input$os1[1]&
             geo1$Offst_S<=input$os1[2]&
               geo1$Onst_Sn>=input$os2[1]&
               geo1$Onst_Sn<=input$os2[2]
             )






    # build graph with ggplot syntax
      ggplot(data_plot, aes(x =geo1$Offst_S , y =geo1$Onst_Sn  )) +
      geom_point()

     #x<-geo1[,c(input$x,input$y)]
    # x<-san()
    #  plot(x,col = "#75AADB", pch = 19,main=paste0(input$y,"  vs ",input$x))

  })
}

shinyApp(ui,server)
...