如何修复 R Shiny 应用程序中传单地图上的地理空间错误标签?

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

我根据一个数据框制作了以下地图,其中包含 1995-2015 年每个州每 10 万人的假释人数以及每个州的空间信息。我想将它合并到 rshiny 应用程序中,以便有一个滑块能够选择特定年份并查看它。我让滑块开始工作并更改数据,当您第一次运行时,它会工作并为您提供适当的状态和数字。但是,当您移动滑块时,地理空间标签开始使用反应性移动,并且不同的状态开始获得不同的状态标签。就像下面这样: 滑块从 2000 年开始,您可以看到,如果我将其移动到它周围,在本例中为 2014 年,现在我们将佛罗里达州标记为蒙大拿州。

所有这些都是在 R闪亮应用程序中完成的。这是我下面的代码。我的传单地图完全在服务器外部创建。

server <- function(input, output) {
  
  #Set YEAR with Slider
  state_parole_year <- reactive({
    state_parole %>%
      filter(year == year(input$year))
    })
  
  labels_year <- reactive({paste("Parole/100000 US Adults",
        state_parole_year()$state, state_parole_year()$number_on_parole_per_100000_us_adult_residents)})

  output$mymap <- renderLeaflet({
    state_map %>%
      addTiles()%>%
      addPolygons(fillColor = ~ pal(state_parole_year()$number_on_parole_per_100000_us_adult_residents),
                  fillOpacity = 1,
                  color = "blue",
                  opacity = 0.1,
                  weight = 1,
                  highlight = highlightOptions(
                    weight = 3,
                    color = "blue",
                    fillOpacity = .2,
                    bringToFront = TRUE),
                  label = labels_year())
      
  })
}

当我在 r闪亮应用程序之外运行传单地图并通过子集化 csv 手动更改年份时,它工作得很好。当我尝试使标签对滑块做出反应时,就会出现问题。有人知道我该如何解决这个问题吗?

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

问题在于您在未过滤的数据上构建地图,然后使用过滤后的数据显示它。然后因素发生转变。

一个快速解决方法是直接在

server()
函数中根据过滤后的数据构建地图:

  output$mymap <- renderLeaflet({
    leaflet(data = state_parole_year()) %>%
      addTiles() %>%
      setView(lng = -80,
              lat = 34.5,
              zoom = 4) %>%
      addPolygons(fillColor = ~ pal(state_parole$number_on_parole_per_100000_us_adult_residents),
                  fillOpacity = 1,
                  color = "blue",
                  opacity = 0.1,
                  weight = 1,
                  highlight = highlightOptions(
                    weight = 3,
                    color = "blue",
                    fillOpacity = .2,
                    bringToFront = TRUE),
                  label = labels) %>%
      addLegend(
        position = "topright",
        pal = pal,
        values = ~number_on_parole_per_100000_us_adult_residents,
        title = "# of U.S. Adults on Parole/100000.",
        opacity = 1) %>%
      addTiles()%>%
      addPolygons(fillColor = ~ pal(state_parole_year()$number_on_parole_per_100000_us_adult_residents),
                  fillOpacity = 1,
                  color = "blue",
                  opacity = 0.1,
                  weight = 1,
                  highlight = highlightOptions(
                    weight = 3,
                    color = "blue",
                    fillOpacity = .2,
                    bringToFront = TRUE),
                  label = ~labels_year())
    
    
  })
© www.soinside.com 2019 - 2024. All rights reserved.