【问题标题】:Is is possible to coordinate the animation in 2 plots with gganimate是否可以使用 gganimate 在 2 个绘图中协调动画
【发布时间】:2020-03-03 15:09:29
【问题描述】:

我想要 2 个动画情节,同步进行。所以也许我有一个包含 3 列(时间、x 和 y)的数据集,当我们逐步了解时间时,x 的图和 y 的图会同步移动。 此外,我希望它出现在一个 R-shiny 应用程序中,带有一个名为“迈出一步”的按钮,用于控制动画。 我希望使用 gganimate,然后我只需要一种设置当前显示的框架的方法。这可能吗?

非常感谢,

【问题讨论】:

  • 这是一个相当广泛的问题,涉及多个概念(gganimateshiny)。为了获得最佳(最有用)的响应,您应该考虑重新表述您的问题并包括示例数据。更好的是,包括代码尝试。周围有一些帖子(在 SO 和更广泛的网络上)至少展示了“两个链接图的动画”部分,例如参见issue #140 from gganimate。你越容易让别人回答,你得到的答案就越多(而且答案也会越好)!
  • 你说的很对。让我重新表述一下这个问题:使用 gganimate,我如何启动和停止动画,以及 - 一旦停止 - 我如何设置它当前显示的帧?

标签: r shiny gganimate


【解决方案1】:

这样的事情可能会奏效。使用reactiveVal 监视Make a step 按钮以更新数据集并重新渲染绘图。

library(shiny)
library(ggplot2)

dd  <- tibble(Time = 1:10,
              x = 1:10,
              y = 1:10*10)

ui <- basicPage(column(1, actionButton("make_a_step", "Make a step")),
                column(4, plotOutput("p1")),
                column(4, plotOutput("p2")))

server <- function(input, output) {
  n_steps <- reactiveVal(value = 0)

  observeEvent(input$make_a_step,{
    new_steps <- n_steps() + 1
    n_steps(new_steps)
  })

  plot_fun <- function(df, x_or_y) {
    ggplot(df, aes(x = "Time", y = !!as.name(x_or_y))) + geom_point()
  }

  sub_fun <- function(steps) {
    validate(need(steps <= 10, "You've reached the last time point"))
    dd[1:steps,]
  }

  output$p1 <- renderPlot({
    plot_fun(sub_fun(n_steps()), "x")
  })

  output$p2 <- renderPlot({
    plot_fun(sub_fun(n_steps()), "y")
  })

}

runApp(list(ui = ui, server = server))

【讨论】:

  • 非常感谢您的帮助。是的,这行得通。现在我真的只是举了一个最小的例子来说明我的意思。我其实是这里的这个应用程序
  • oldmortality.shinyapps.io/app6 当您单击开始按钮时,动画会同时运行 3 个绘图。问题是,当我在实验室中有 30 名学生同时运行此程序时,它变得缓慢且不稳定。我在想我可以通过提前生成所有数据来加快速度,然后使用 gganimate 来制作动画。但也许这实际上不会比您上面的代码更快或根本不同
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-25
  • 1970-01-01
  • 1970-01-01
  • 2021-02-22
  • 1970-01-01
  • 2011-08-05
  • 1970-01-01
相关资源
最近更新 更多