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

How to fix geospatial mislabeling on leaflet map within R Shiny app?

我根据一个数据框制作了以下地图,其中包含 1995 年至 2015 年每 100,000 人中每个州的假释人数以及每个州的空间信息。我想将它合并到 r shiny 应用程序中,以便有一个滑块能够选择特定年份并查看它。我让滑块工作并更改数据,当你第一次 运行 它工作并为你提供适当的状态和数字。但是,当您在滑块周围移动时,地理空间标签开始使用反应式移动,不同的状态开始获得不同的状态标签。像下面这样: The slider starts at the year 2000 and as you can see the if I move it around it, in this case 2014, now we have florida being labeled as Montana.

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

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 shiny app 之外的传单地图并通过子集 csv 手动更改年份时,它工作得很好。当我尝试使标签对滑块产生反应时出现问题。有人知道我该如何解决这个问题吗?谢谢!

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

一个快速修复方法是直接在 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())
    
    
  })