【问题标题】:Creating R shiny interactive map创建 R 闪亮的交互式地图
【发布时间】:2021-10-14 18:21:24
【问题描述】:

我一直在尝试为 spData 包中的 NLD_muni 数据集创建带有滑块和下拉菜单的交互式地图。我是闪亮的新手,如何更改此代码以使我的交互式应用程序以更有用的方式显示这些变量。

目前。在选择人口和原产地时,它仅在您单击各个位置时反映原产地 - 并且不显示任何有关人口的信息。

library(spData)

data(NLD_muni)

pop_vars <- setdiff(names(NLD_muni), c("code", "name", "province", "geometry", "origin_native", "origin_west", "origin_non_west", "population", "pop_men", "pop_women"))
origin_vars <- setdiff(names(NLD_muni), c ("code", "name", "province", "geometry", "population", "pop_0_14", "pop_15_24", "pop_25_44", "pop_45_64", "pop_65plus", "pop_men", "pop_women"))


ui <- fluidPage(
  tmapOutput("map"),
  selectInput("pop", "Population", pop_vars),
  selectInput("or", "Origin", origin_vars)
)

server <- function(input, output, session) {
  output$map <- renderTmap({
    tm_shape(NLD_muni) +
      tm_polygons(world_vars[1]) 
  })
  
  output$map <- renderTmap({
    tm_shape(NLD_muni) +
      tm_polygons(origin_vars[1])
  })
  
  observe({
    pop <- input$pop
    tmapProxy("map", session, {
      tm_shape(NLD_muni) +
        tm_polygons(pop)
    
    })
    
  observe ({
    or <- input$or
    tmapProxy("map", session, {
      tm_shape(NLD_muni) +
        tm_polygons(or)
    })
  })
  })
}   


shinyApp(ui, server)


【问题讨论】:

    标签: r shiny tmap


    【解决方案1】:

    我认为您想要的是显示一张地图,显示最近从任一下拉菜单中选择的项目。因此,如果您选择pop_65plus,则会显示此数据,然后如果您选择origin_west,则会显示此数据,从而删除pop_65plus 数据。

    这里有一些代码可以做到这一点。

    library(spData)
    library(shiny)
    library(tmap)
    
    data(NLD_muni)
    
    pop_vars <- setdiff(names(NLD_muni), c("code", "name", "province", "geometry", "origin_native", "origin_west", "origin_non_west", "population", "pop_men", "pop_women"))
    origin_vars <- setdiff(names(NLD_muni), c ("code", "name", "province", "geometry", "population", "pop_0_14", "pop_15_24", "pop_25_44", "pop_45_64", "pop_65plus", "pop_men", "pop_women"))
    
    ui <- fluidPage(
        tmapOutput("map"),
        selectInput("pop", "Population", pop_vars),
        selectInput("or", "Origin", origin_vars)
    )
    
    server <- function(input, output, session) {
    
        output$map <- renderTmap({
            # explicily set the index of the layer so it can be removed later
            tm_shape(NLD_muni) + tm_polygons(origin_vars[1], zindex = 401) 
        })
        
        observe({
            pop <- input$pop
            tmapProxy("map", session, {
                tm_remove_layer(401)
                tm_shape(NLD_muni) + tm_polygons(pop, zindex = 401)
            })
        }) # make this observe no longer include the following one
        observe ({
            or <- input$or
            tmapProxy("map", session, {
                tm_remove_layer(401)
                tm_shape(NLD_muni) + tm_polygons(or, zindex = 401)
            })
        })
    }   
    
    shinyApp(ui, server)
    

    我更改了原始代码,使observe 语句之一不嵌套在另一个语句中。每次添加新图层时,我还明确删除了一个图层。老实说,如果没有这个,它就可以工作,但为了完整起见,我包括了额外的东西。为了使示例可重现,我还添加了一些库调用,并删除了一个对 renderTmap 的调用,该调用使用了一个不存在的变量 world_vars

    【讨论】:

      猜你喜欢
      • 2018-12-03
      • 1970-01-01
      • 2019-05-20
      • 1970-01-01
      • 2020-04-16
      • 1970-01-01
      • 2021-06-14
      • 1970-01-01
      • 2015-12-06
      相关资源
      最近更新 更多