text: library(tourr)
  library(ggvis)
  library(shiny)
  
  aps <- 2
  fps <- 30
  
  mat <- rescale(as.matrix(flea[1:6]))
  tour <- new_tour(mat, grand_tour(), NULL)
  start <- tour(0)
  
  proj_data <- reactive({
    invalidateLater(1000 / fps, NULL);
    step <- tour(aps / fps)
    data.frame(center(mat %*% step$proj), species = flea$species)
  })
  
  proj_data %>% ggvis(~X1, ~X2, fill = ~species) %>%
    layer_points() %>%
    scale_numeric("x", domain = c(-1, 1)) %>%
    scale_numeric("y", domain = c(-1, 1)) %>%
    set_options(duration = 0)
  