Блестящая реактивная ценность с радиокнопкой - PullRequest
1 голос
/ 12 марта 2019

Я создаю приложение Shiny, предназначенное для отображения картограммы.

Я бы хотел реактивно изменить значения, отображаемые на моей карте с помощью радиокнопок.

С нормальной кнопкой все работало нормально, но я сейчас борюсь с радиокнопкой, есть идеи?

Вы можете скачать данные по этой ссылке: https://www.data.gouv.fr/fr/datasets/r/8b004f01-e7af-40d2-ab4a-8108a8bd24b2

вот мой код:

sData <- readOGR(dsn = " Set your path to the downloaded Data here")

ui<- bootstrapPage(
  leafletOutput("mymap"),
  absolutePanel(top = 10, 
                right = 10,
                radioButtons("radio", h3("Indicateurs de mobilité"),
                             choices = list("AttrOne" = "Attr1",
                                            "AttrTwo" = "Attr2")))
  )

server <- function(input, output, session) {
  v <- reactiveValues(data = sData$numdep)

  observeEvent(input$Attr1, {
    v$data <- sData $numdep
  })
  observeEvent(input$Attr2, {
    v$data <- sData $insee
  })



  output$mymap <- renderLeaflet({
    leaflet(sData) %>%  
      addProviderTiles(
           providers$"CartoDB.DarkMatter") %>%
      addPolygons(
           fillColor = ~colorBin(palette = "YlOrRd", 
                                 bins = getBreaks(v$data, 
                                                  nclass = 6, 
                                                  method = "fisher-jenks"),
                                 domain = v$data
                                 )(v$data),
           weight = 1,
           opacity = 0.3,
           color = "white",
           fillOpacity = 0.3)
  })
}

shinyApp(ui = ui, server = server)

1 Ответ

1 голос
/ 12 марта 2019

По крайней мере, одна проблема заключается в том, что вы «слушаете» не ту кнопку, это должно быть id, которое вы определили в вас ui, в вашем случае, «радио».Кроме того, вы можете сделать вы с одним observeEvent вместо вашего пути;

    ui<- bootstrapPage(
      leafletOutput("mymap"),
      absolutePanel(top = 10, 
                    right = 10,
                    radioButtons("radio", h3("Indicateurs de mobilité"),
                                 choices = list("AttrOne" = "Attr1",
                                                "AttrTwo" = "Attr2",
                                                "AttrThree" = "Attr3")))
      )

    server <- function(input, output, session) {
  v <-  observeEvent(input$radio,{ 

     if(input$radio=="Attr1"){
         v$data <- Df$A1}
     if(input$radio=="Attr2"){
         v$data <- Df$A2}
     if(input$radio=="Attr3"){
        v$data <- Df$A4}
  })





  output$mymap <- renderLeaflet({
    leaflet(Df) %>%  
      addProviderTiles(
           providers$"CartoDB.DarkMatter") %>%
      addPolygons(
           fillColor = ~colorBin(palette = "YlOrRd", 
                                 bins = getBreaks(v$data, 
                                                  nclass = 6, 
                                                  method = "fisher-jenks"),
                                 domain = v$data
                                 )(v$data),
           weight = 1,
           opacity = 0.3,
           color = "white",
           fillOpacity = 0.3)
  })
}

shinyApp(ui = ui, server = server)

Несмотря на эту ошибку, я не могу заверить вас, что это будет работать нормально, потому что ваш пример не воспроизводим.В следующий раз, пожалуйста, не могли бы вы предоставить нам dput(Df) или хотя бы несколько строк, чтобы мы могли выполнить ваш код от начала до конца и найти другие проблемы?

С вашим кодом:

ui<- bootstrapPage(
  leafletOutput("mymap"),
  absolutePanel(top = 10, 
                right = 10,
                radioButtons("radio", h3("Indicateurs de mobilité"),
                             choices = list("AttrOne" = "Attr1",
                                            "AttrTwo" = "Attr2")))
  )

    server <- function(input, output, session) {
  v <- reactiveValues(data = sData$numdep)

observeEvent(input$radio,{ 

    if(input$radio=="Attr1"){
      v$data <- sData$numdep
      }
    if(input$radio=="Attr2"){
      v$data <- sData$insee
      }
  })

   output$mymap <- renderLeaflet({
    leaflet(sData) %>%  
      addProviderTiles(
           providers$"CartoDB.DarkMatter") %>%
      addPolygons(
           fillColor = ~colorBin(palette = "YlOrRd", 
                                 bins = getBreaks(v$data, 
                                                  nclass = 6, 
                                                  method = "fisher-jenks"),
                                 domain = v$data
                                 )(v$data),
           weight = 1,
           opacity = 0.3,
           color = "white",
           fillOpacity = 0.3)
  })
}

shinyApp(ui = ui, server = server)

Лучший!

...