Моему приложению Shiny для анимации нужно много рисовать. Я могу изменить интервал анимации для сюжета с помощью ползунка управления.
Этот воспроизводимый пример отображает и анимирует случайные точки:
library(shiny)
library(ggplot2)
library(dplyr)
df <- data.frame(frame_no = rep(1:500,10), x = runif(5000), y=runif(5000))
ui <- fluidPage(
sliderInput("frameInterval", "Set frame Interval (ms.)", min=0,
max=2000, value=100,step=50),
uiOutput("frameSlider"),
plotOutput("plot.positions", height=500, width = 500)
)
server <- function(input, output, session) {
output$frameSlider <- renderUI( sliderInput("frame", label= h3("Animate"),
min=1, max = 5000,
value=1, step=1, sep=NULL,
animate = animationOptions(interval = input$frameInterval, loop =
TRUE))
)
output$plot.positions <- renderPlot( {
f <- filter(df, frame_no==input$frame)
ggplot(f, aes(x=x, y=y)) + xlim(0,1) + ylim(0,1) +
geom_point(aes(size=3)) +
annotate("text", x= 0.5, y= 0.5, label=paste("Frame ", input$frame),
size=6)
},
bg="transparent"
)
}
shinyApp(ui = ui, server = server)
Проблема, с которой я столкнулся, заключается в том, что при небольшом интервале анимации (скажем, 100 мс) график отстает от ползунка, как показано путем сравнения значения ползунка и номера построенного кадра.
Затем, если я захочу приостановить анимацию, щелкнув паузу ползунка, дисплей продолжит работу, пока снова не догонит значение ползунка.
Есть ли способ мгновенно остановить анимацию, даже если она отстает?
Спасибо за любой совет.