Shiny/Leaflet: цвета для цветовой карты по данным пользователя

Я пытаюсь создать приложение, которое строит карту листовки, основанную на переменной, введенной пользователем.

Сейчас я хочу, чтобы он работал с категориальными переменными, поэтому я попытался использовать colorFactor() создать палитру. Полигоны построены, но без цветов.

Приложение находится в сети здесь, и полный код находится на репозитории GitHub. Код сервера, где я считаю, ошибка, ниже:

function(input, output, session) {

  ## Interactive Map ###########################################

  # Create pallete
  colorpal <- reactive({
    colorFactor("viridis", as.data.frame(ubs_malhas)[ubs_malhas$modelo == input$modelo, input$indicador])
  })

  indic.select <- isolate(switch(input$indicador,
                                 vars_setor))

  # Create lables
  labels_setor <- reactive({
    sprintf(
      "<strong>%s</strong><br/>
        CNES: %s<br/>
        Tempo médio até UBS: %g<br/>
        Distância média até UBS: %g<br/>
        Percetual AV: %s<br/>
        AC: %g",
      ubs_malhas$nomeubs[ubs_malhas$modelo == input$modelo],
      ubs_malhas$cnes[ubs_malhas$modelo == input$modelo],
      round(ubs_malhas$media_minutos_ubs[ubs_malhas$modelo == input$modelo], 1),
      round(ubs_malhas$media_minutos_ubs[ubs_malhas$modelo == input$modelo], 1),
      scales::percent(round(ubs_malhas$av_prop_ubs[ubs_malhas$modelo == input$modelo], 3)),
      round(ubs_malhas$ac_ubs[ubs_malhas$modelo == input$modelo], 2)
    ) %>% lapply(htmltools::HTML)
  })

  # plot the map
output$mapa <- renderLeaflet({

    pal <- colorpal()

    leaflet() %>% 
      addTiles() %>% 
      setView(lng = -46.64803, lat = -23.64992, zoom = 11)
  })

    # observe to add polygons and colors
    observe({
      pal <- colorpal()
      var <- input$indicador

      leafletProxy("mapa", data =  st_transform(ubs_malhas, 4326)[ubs_malhas$modelo == input$modelo, ]) %>% 
        clearShapes() %>%
        addPolygons(
          fillColor = pal(var),
          weight = 1, 
          opacity = 0.8,
          color = "black",
          fillOpacity = 0.6,
          # adicionar interação
          highlight = highlightOptions(
            weight = 3,
            color = "#666",
            fillOpacity = 0.6,
            bringToFront = FALSE),
          # adicionar pop-up
          label = labels_setor(),
          labelOptions = labelOptions(
            style = list("font-weight" = "normal", padding = "3px 8px"),
            textsize = "15px",
            direction = "auto")
          )
      })

# observe to add legend
    observe({
      pal <- colorpal()

      leafletProxy("mapa", data =  st_transform(ubs_malhas, 4326)[ubs_malhas$modelo == input$modelo, ]) %>% 
        addLegend(
          data = st_transform(ubs_malhas, 4326)[ubs_malhas$modelo == input$modelo, ],
          title = names(vars_setor[vars_setor == input$indicador]),
          pal = pal,
          values = ~input$indicador,
          opacity = 0.7,
          position = "topleft"
        )
    })
  }

После runApp() я получил следующую ошибку:

Listening on http://127.0.0.1:6204
Warning in pal(var) :
  Some values were outside the color scale and will be treated as NA
Warning in pal(v) :
  Some values were outside the color scale and will be treated as NA

Карта есть, а цвета нет.

Как я мог сделать это работает?

Заранее спасибо.

2 ответа

Ваш логический слайсер для вашей функции colorpal искажен, он должен быть: colorFactor("viridis", as.data.frame(ubs_malhas)[ubs_malhas$modelo == input$modelo, ], input$indicador)

Я столкнулся с точной проблемой. Я потратил всю ночь на отладку, но проблема заключалась в переменной, которую я передал функции pal. Я неправильно написал слово «Северо-Запад» как «Северо-запад». Поэтому я предлагаю вам пройтись по уникальным значениям, которые вы передаете приятелю, и проверить, совпадают ли они с переменными, используемыми при инициализации приятеля.

Другие вопросы по тегам