【问题标题】:Animating scales parameter动画比例参数
【发布时间】:2021-05-14 05:54:58
【问题描述】:

我正在寻找一种优雅/简洁的方式来在 R 中制作动画,该动画在我的 y 比例转换中移动参数。

假设我有这个数据和图表:

library(tidyverse); library(gganimate); library(scales)
my_data <- tibble(time  = 1:100, value = (5*sin(time/100))^6 + (1E3*sin(time/5)))
scale_plot <- function(sig) {
  ggplot(my_data, aes(time, value)) + 
         geom_line() + labs(title = paste("sigma =", {{ sig }})) +
         scale_y_continuous(trans = pseudo_log_trans(sigma = sig))  
}

根据我是要强调全局效果还是局部效果,我可能会选择在scales::pseudo_lot_trans() 中使用不同的sigma 参数:

scale_plot(20000) # pretty close to linear

scale_plot(200)   # toward log

我想要一种优雅/简洁的方式来制作在它们之间切换的动画。我遇到过使用循环生成一系列静态图像的方法,然后使用gifskianimation 之类的方法将它们编译成GIF。 (请参阅my answer to another question。)理想情况下,我想找到一种使用gganimate 的方法,但到目前为止,我只知道如何为数据中的更改或视口中的更改设置动画(例如使用gganimate::view_manual ),而不是转换的参数。有没有比“手动”构建框架更简洁的方法?

【问题讨论】:

    标签: r animated-gif gganimate


    【解决方案1】:

    采用my answer to another question,这可以通过创建框架然后使用animation 包组合它们来实现。使用gganimate 是否有更好的方法可以忽略?

    library(animation); library(Cairo)
    sig_seq = (10:150)^2
    oopt = ani.options(interval = 1/10)
    CairoPNG(filename = ani.options("img.fmt"))  #using Cairo device for smoother antialiasing
    saveGIF({for (i in 1:length(sig_seq)) {
      print(scale_plot(sig_seq[i]))
      print(paste0(i, " out of ",length(sig_seq)))
      ani.pause()}
    },movie.name="sigma_anim.gif", ani.width = 300, ani.height = 200) 
    

    【讨论】:

      猜你喜欢
      • 2012-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-11
      • 1970-01-01
      • 1970-01-01
      • 2022-12-03
      • 2011-03-05
      相关资源
      最近更新 更多