【问题标题】:Shiny reactive value with radiobutton带单选按钮的闪亮反应值
【发布时间】:2019-08-02 20:47:31
【问题描述】:

我正在创建一个用于显示等值线地图的 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)

【问题讨论】:

    标签: r shiny radio-button leaflet choropleth


    【解决方案1】:

    至少一个问题是您“听”错了按钮,它应该是您确定的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)
    

    最好的!

    【讨论】:

    • 感谢您的回复,我已经用一些数据编辑了我的问题和代码。它似乎不起作用,当我运行代码时收到此错误消息“警告:
    • 解决了!额外的问题来自反应性: v
    猜你喜欢
    • 2021-05-01
    • 2016-07-08
    • 2016-12-15
    • 2015-10-27
    • 1970-01-01
    • 2021-05-16
    • 1970-01-01
    • 2015-09-19
    • 2019-02-10
    相关资源
    最近更新 更多