Я новичок в создании карт с помощью Shiny, но моя цель - создать интерактивную карту, которая изменяется при выборе различных входов. Например: при выборе месяца будут отображаться только маркеры этого месяца. Когда вы выбираете год, он будет отображать наблюдения за этот год И месяц (и так далее).
Прямо сейчас я могу получить свою карту для визуализации, но точки, которые появляются на карте, не соответствуют тому, что пользователь выбирает в раскрывающемся списке.
Вот код, который я пробовал:
library(shiny)
library(dplyr)
library(leaflet)
SampleData <- data.frame(year = c('2017', '2018', '2019', '2020'),
lon = c(38.62893, 38.62681, 38.62797, 38.62972),
lat = c(-90.26233, -90.25272, -90.26232, -90.25703),
month = c('January', 'February', 'March', 'April', 'May'),
new_use = c('Industrial', 'Institutional', 'Commercial', 'Residential')
use <- sort(unique(SampleData$new_use))
years <- sort(unique(SampleData$year))
months <- sort(unique(SampleData$month))
ui <- bootstrapPage(
tags$style(type = "text/css", "html, body {width:100%;height:100%}"),
leafletOutput("map", width = "100%", height = "100%"),
absolutePanel(top = 10, right = 10,
selectInput("month", "Month",
choices = sort(unique(SampleData$month))),
selectInput("year", "Year",
choices = sort(unique(SampleData$year))),
selectInput("new_use", "Permit Use",
choices = sort(unique(SampleData$new_use))),
)
)
server <- function(input, output, session) {
output$map <- renderLeaflet({
leaflet() %>%
setView(lng = -90.1994, lat = 38.6270, zoom = 10)%>%
addProviderTiles(providers$CartoDB.Positron)
})
# Reactive expression for the data subsetted to what the user selected
filteredData <- reactive({
dplyr::filter(SampleData, years %in% input$year & use %in% input$new_use & months %in% input$month)
})
observe({
leafletProxy("map") %>%
clearShapes() %>%
addMarkers(data = filteredData(),
~lat, ~lon, popup = paste("<b>Year:</b> ", filteredData()$year, "<br>",
"<b>Permit Type:</b> ", filteredData()$new_use, "<br>"))
})
}
shinyApp(ui, server)
Есть ли у кого-нибудь предложения? Что мне не хватает?