Использование пользовательского интерфейса для включения и выключения отображения данных и листовок

Я создал образец этой проблемы в файлах ui.R и server.R. Это файл ui.R. Есть три случайных набора данных. Тот с маркерами будет отображаться независимо от того, что сделано с пользовательским интерфейсом. Два других набора данных должны отображаться только в том случае, если они запрашиваются как "Круги".

library(shiny)
library(leaflet)
pageWithSidebar(
    headerPanel("Main Title Here"),
    sidebarPanel(
        checkboxInput('Circles', 'Show Locations', TRUE)
    ),

    mainPanel(
        leafletOutput("map")
    )

)

Карта сгенерирована server.R, что следует ниже. Это генерирует случайные данные и широту и долготу местоположений.

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

shinyServer(function(input, output) {
    output$map <- renderLeaflet({
        leaflet() %>%
             addTiles(group = "OpenStreetMap") %>%
             addMarkers(runif(20,-75,-74),
                  runif(20, 41, 42))
    })
    observe({
        proxy <- leafletProxy("map")
        if (input$Circles == TRUE) {
            proxy %>% addCircles(runif(20,-75,-74),
                           runif(20, 41, 42),
                           group = "Circles",
                           color = "red") %>%
            addCircles(runif(20,-75,-74),
                   runif(20, 41, 42),
                   group = "Circles",
                   color = "blue") %>%
            addLegend(
                position = "bottomright",
                colors = c("red", "blue"),
                labels = c("Group 1", "Group 2")
            )
      # cannot put group or label on legend.
      } else {
          proxy %>% hideGroup("Circles")
          # %>% hideGroup("Group 2")
      }
    })
})

Отображение кругов включено (ИСТИНА) при запуске программы. Я вижу две основные проблемы здесь. Во-первых, круги можно отключить, но это конец любого элемента управления пользовательского интерфейса. Проблема в том, что их нельзя включить снова. Если я попытаюсь запустить checkboxInput как FALSE, элемент управления UI не включит его. Я не знаю, является ли это стандартом, или я делаю что-то не так.

Вторая серьезная проблема заключается в том, что я не могу запрограммировать отключение легенды вместе с кругами. Круги отключаются с помощью функции hideGroup(). Это отклонено для использования на легенде. Я взял команду, которую попробовал, и превратил ее в строку комментария. Идите дальше и удалите знак #, чтобы вы могли видеть ошибки, которые он создает. Я еще не нашел альтернативу.

1 ответ

Я хотел бы поблагодарить SymblixAU за то, что направили меня в правильном направлении. Проблема с hideGroup и showGroup заключается в том, что обе функции принимают небольшое количество переменных. Отображение данных должно быть предварительно определено другими командами, такими как addCircles или addMarkers. У меня наконец есть рабочая версия, показанная ниже:

library(shiny)
library(leaflet)

shinyServer(function(input, output) {
    output$map <- renderLeaflet({
        leaflet() %>%
            addTiles(group = "OpenStreetMap") %>%
            addMarkers(runif(20,-75,-74),
                   runif(20, 41, 42))
    })

    proxy <- leafletProxy("map")

    proxy %>% addCircles(runif(20,-75,-74),
                     runif(20, 41, 42),
                     group = "Circles",
                     color = "red") %>%
    addCircles(runif(20,-75,-74),
               runif(20, 41, 42),
               group = "Circles",
               color = "blue")

# now we can show or hide depending on UI
    observe({
        if (input$Circles == TRUE) {
            proxy %>% showGroup("Circles")
        } else {
            proxy %>% hideGroup("Circles")
        }
    })

})

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

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