我正在尝试在 Shiny R 中创建一张带有传单的地图。我有几个问题:
如何通过选择按国家/地区列出的症状来创建地图?正如您所看到的,数据包含行中的国家/地区和症状(请参阅下面提供的 GitHub 上的链接)。如果我想按特定国家和特定症状进行过滤,我该如何使用 Shiny r 中的传单进行此操作?
我想创建一个可拖动的下拉菜单(可以选择症状 - 请参阅问题 1),因为我无法调整整个屏幕上的地图。一个可拖动下拉菜单的示例,称为“Zip Explored”,我尝试复制,但没有成功 - https://shiny.rstudio.com/gallery/superzip-example.html
我无法使地图显示在整个屏幕上。有没有办法让地图全屏显示?就像第二点网络链接中的示例一样。
这是代码:
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
这是一个简短的演示,希望对您有所帮助。
一些注意事项:
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)
)
)