在 RShiny 中集成传单地图 - 按国家和症状输入选择

问题描述 投票:0回答:1

我正在尝试在 Shiny R 中创建一张带有传单的地图。我有几个问题:

  1. 如何通过选择按国家/地区列出的症状来创建地图?正如您所看到的,数据包含行中的国家/地区和症状(请参阅下面提供的 GitHub 上的链接)。如果我想按特定国家和特定症状进行过滤,我该如何使用 Shiny r 中的传单进行此操作?

  2. 我想创建一个可拖动的下拉菜单(可以选择症状 - 请参阅问题 1),因为我无法调整整个屏幕上的地图。一个可拖动下拉菜单的示例,称为“Zip Explored”,我尝试复制,但没有成功 - https://shiny.rstudio.com/gallery/superzip-example.html

  3. 我无法使地图显示在整个屏幕上。有没有办法让地图全屏显示?就像第二点网络链接中的示例一样。

这是代码:

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

r shiny r-leaflet
1个回答
1
投票

这是一个简短的演示,希望对您有所帮助。

一些注意事项:

  • 确保每个
    selectInput
    都有唯一的
    inputId
    。两者的 ID 相同。
  • 您可能需要将
    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
(如您引用的示例中所示)。

请注意,该示例使用自定义 .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)
  )
)
© www.soinside.com 2019 - 2024. All rights reserved.