我根据一个数据框制作了以下地图,其中包含 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 手动更改年份时,它工作得很好。当我尝试使标签对滑块做出反应时,就会出现问题。有人知道我该如何解决这个问题吗?
问题在于您在未过滤的数据上构建地图,然后使用过滤后的数据显示它。然后因素发生转变。
一个快速解决方法是直接在
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())
})