R 中的交互式地图使用 leaflet/Shiny

Interactive Map in R using leaflet/Shiny

我想创建一个带有边栏的地图,您可以在其中 select 时间段的范围。这个想法是地图只显示在此期间开业的酒店的标记。我不知道该怎么做,所以我尝试使用 selectInput 代替,因为它对我来说似乎更容易一些。但似乎我仍然无法让它发挥作用。任何指导将不胜感激。

这是示例数据框:

Hotel Year   lat        long
  A   2000 41.886337 -87.628472
  B   2005 41.88819  -87.635199
  C   2010 41.891113 -87.63301

这是ui.R:

#ui.R
library(shiny)
library(leaflet)

shinyUI(fluidPage(
  titlePanel("Hotel Map"),
  sidebarLayout(
    sidebarPanel(
      selectInput("year", 
                  label = "Choose Year:",
                  choices = c(2000,2005,2010),
                  selected = 2000
      )),

    mainPanel (leafletOutput("map","100%",300))
  )
))

这是server.R:

library(shiny)
library(leaflet)
source("RStudio\Map-app")
hotels <- read.csv("RStudio\Map-app\ChicagoHotels.csv")

shinyServer(
  function(input, output) {

    output$map <- renderLeaflet({
    df <- hotels[hotels$Year == input$year,]  
    leaflet()  %>%
        addTiles() %>%
        addCircles(data = df)
    })

  }
    )

首先,您应该了解的是 mainPanel 首先在做什么。主面板不会接收

leafletMap("map","100%",300)

它要求您改为输入:

leafletOutput("map", "100%", 300)

或其他一些相关的传单输出声明。

shiny的设计方式,如果你想输出图形或表格,你需要有你在server.R文件中创建的output$map对象,回到ui.R 并且您的图形将仅根据特定的输出语句输出。

此页面包含大量示例和帮助。

Leaflet link you should really look at, so click me!

感谢您顺便向我介绍传单,这是一个比 googleVis 包的 gvisGeoMap 功能更好的工具。

@InfiniteFlashChess 没错。

Server.R

library(leaflet)

hotels <- read.table(text = "Hotel Year  latitude        longitude
                              A   2000  41.886337      -87.628472
                              B   2005  41.88819       -87.635199
                              C   2010  41.891113      -87.63301", 
                     header = TRUE)

shinyServer(function(input, output) {

output$map <- renderLeaflet({
  df <- hotels[hotels$Year == input$year,]  
  leaflet()  %>%
    addTiles() %>%
    addMarkers(data = df)
 })

})

Ui.R

library(shiny)
library(leaflet)

shinyUI(fluidPage(
titlePanel("Hotel Map"),
 sidebarLayout(
  sidebarPanel(
   selectInput("year", 
               label = "Choose Year:",
               choices = c(2000,2005,2010),
               selected = 2000
  )),

mainPanel (leafletOutput("map","100%",300))

              )
))