интеграция карты листовок в РШины - ввод выбор по стране и симптому - PullRequest
0 голосов
/ 12 июля 2020

Я пытаюсь создать карту в Shiny R с листовкой. У меня несколько вопросов:

  1. Как создать карту, выбрав «Симптомы по странам»? как вы можете видеть, данные содержат страны и симптомы в строках (см. ссылку на GitHub ниже). если я хочу отфильтровать по определенной стране и определенному симптому, как мне это сделать с листовкой в ​​Shiny r?

  2. Я хочу создать перетаскиваемое раскрывающееся меню (где можно выбрать симптомы - см. вопрос 1), так как я не могу настроить карту на весь экран. Пример перетаскиваемого раскрывающегося меню под названием «Zip Explored», который я пытался воспроизвести, но безуспешно, здесь - https://shiny.rstudio.com/gallery/superzip-example.html

  3. Я не смог сделать карту так, чтобы она отображалась на весь экран. Есть ли способ показать карту на весь экран? Как и в примере в веб-ссылке во 2-й точке.

вот код:

library(shiny)
library(cvindia)
library(tidyverse)
library(shinydashboard)


server = function(input, output, session){}




    ui <- fluidPage(
    
        # Application title
        h1("Symptoms accross the world"),
    
        # Sidebar with a slider input for number of bins 
        selectInput("productCategory", "Select Country", c( "Bangladesh", "India", "Nigeria", "Pakistan", "United Kingdom")), 
        selectInput("productCategory", "Symptom", c("Chills", "Cough", "Muscle Ache"))
    )
    
    server <- function(input, output) {
        
        
    }
    
    
    # Run the application 
    shinyApp(ui = ui, server = server)

Если вышеуказанный код запущен, то я легко могу удалось создать selectInput по стране и симптому.

Вот второй код, который у меня есть, я не понимаю, как он должен взаимодействовать с сервером, имея в виду интересующие меня значения и предполагаю, что он должен взаимодействовать с пользовательским интерфейсом находятся в строках:

leaflet() %>%
  addTiles()

map <- leaflet(gather_divided) %>% addTiles() %>% addMarkers(clusterOptions = markerClusterOptions())

map

Образец набора данных находится на моем GitHub, поскольку я не нашел более элегантного способа развертывания его для переполнения стека:

https://github.com/gabrielburcea/stackoverflow_fake_data/tree/master

1 Ответ

1 голос
/ 12 июля 2020

Вот краткая демонстрация, которая, я надеюсь, будет полезной.

Несколько примечаний:

  • Убедитесь, что каждый selectInput имеет уникальный inputId. У вас одинаковый идентификатор для обоих.
  • Вы можете добавить multiple = TRUE к selectInput, чтобы выбрать более одной страны или симптома
  • Вы можете использовать reactive выражение в server для фильтрации данных на основе выбора ввода

Это также может быть полезным справочным материалом для использования leaflet с shiny:

https://rstudio.github.io/leaflet/shiny.html

Дайте мне знать, если это то, что вы имели в виду.

library(shiny)
library(tidyverse)
library(leaflet)

fake_data <- read.csv("https://raw.githubusercontent.com/gabrielburcea/stackoverflow_fake_data/master/gather_divided.csv")

ui <- fluidPage(
  
  # Application title
  h1("Symptoms accross the world"),
  
  # Inputs for country and symptom 
  selectInput("country", "Select Country", c("Bangladesh", "India", "Nigeria", "Pakistan", "United Kingdom"), multiple = TRUE), 
  selectInput("symptom", "Symptom", c("Chills", "Cough", "Muscle Ache"), multiple = TRUE),
  
  # Output with map
  h2("Map"),
  leafletOutput("map")
  
)

server <- function(input, output) {
  
  filtered_data <- reactive({
    fake_data %>%
      filter(Country %in% input$country,
             Symptom %in% input$symptom)
  })
  
  output$map <- renderLeaflet({
    leaflet() %>%
      addTiles() %>%
      addMarkers(data = filtered_data())
  })
  
}

# Run the application 
shinyApp(ui = ui, server = server)

Редактировать :

Чтобы сделать ваш selectInput появляются в плавающем перетаскиваемом меню, вы можете использовать absolutePanel (как в приведенном вами примере).

Обратите внимание, что в примере используется custom. css, который может улучшить внешний вид вашего блестящего приложения. далее.

ui <- fluidPage(
  
  h1("Symptoms accross the world"),
  leafletOutput("map"),
  
  # Floating panel
  absolutePanel(id = "controls", class = "panel panel-default", fixed = TRUE,
                draggable = TRUE, top = 60, left = "auto", right = 20, bottom = "auto",
                width = 330, height = "auto",
                
                h2("Data Explorer"),
                
                # Inputs for country and symptom 
                selectInput("country", "Select Country", c("Bangladesh", "India", "Nigeria", "Pakistan", "United Kingdom"), multiple = TRUE), 
                selectInput("symptom", "Symptom", c("Chills", "Cough", "Muscle Ache"), multiple = TRUE)
  )
)
...