Анимация SliderInput: refre sh при повторном нажатии на воспроизведение? Или лучше переход с ClearShapes ()? - PullRequest
0 голосов
/ 02 мая 2020

Можно обновить sh визуализированную визуализацию в Shiny при повторном нажатии на игру ??

Например, давайте посмотрим на этот код из этого поста: бегунок времени с листовкой / R .

Я немного его изменил: (1) я фильтрую значение в реактивном по точному моменту времени и (2) я удаляю ClearShapes () из LeafletProxy, чтобы получить кумулятивный вид. Последний пункт очень важен.

Сначала код работает хорошо, но когда я снова нажимаю кнопку воспроизведения, круги из последнего l oop не исчезают.

Итак, в заключение, мне нужно перезапустить листовку в ее первоначальном виде при повторном нажатии на игру. Есть ли способ добиться этого? Или для достижения лучшего перехода с ClearShapes.

library(shiny)
library(dplyr)
library(leaflet)

# Fake data
df <- data.frame(lng = c(-5, -5, -5, -5, -15, -15, -10),
                 lat = c(8, 8, 8, 8, 33, 33, 20),
                 year = c(2018, 2018, 2018, 2017, 2017, 2017, 2016),
                 stringsAsFactors = FALSE)

ui <- bootstrapPage(
  tags$style(type = "text/css", "html, body {width:100%;height:100%}"),
  leafletOutput("map", width = "100%", height = "100%"),
  absolutePanel(top = 10, right = 10,
                style="z-index:500;", # legend over my map (map z = 400)
                tags$h3("map"), 
                sliderInput("periode", "Chronology",
                            min(df$year),
                            max(df$year),
                            value = min(df$year),
                            step = 1,
                            animate = animationOptions()
                )
)
)

server <- function(input, output, session) {

  # reactive filtering data from UI

  reactive_data_chrono <- reactive({
    df %>%
      filter(year == input$periode)
  })


  # static backround map
  output$map <- renderLeaflet({
    leaflet(df) %>%
      addTiles() %>%
      fitBounds(~min(lng), ~min(lat), ~max(lng), ~max(lat))
  })  

  # reactive circles map
  observe({
    leafletProxy("map", data = reactive_data_chrono()) %>%
      addCircles(lng=~lng,
                 lat=~lat)
  })
}

shinyApp(ui, server)
...