如何修复 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())
})
我根据一个数据框制作了以下地图,其中包含 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())
})