Использование пользовательского интерфейса для включения и выключения отображения данных и листовок
Я создал образец этой проблемы в файлах 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")
}
})
})
Я также отказался от использования легенды. Мне еще предстоит найти программное обеспечение, которое будет адекватно контролировать количество легенд, добавляемых к сюжету, поэтому мне придется описать использование цветов другим способом, возможно, в тексте.