首页 > 解决方案 > 动画比例参数

问题描述

我正在寻找一种优雅/简洁的方式来在 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))  
}

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

scale_plot(20000) # pretty close to linear

在此处输入图像描述

scale_plot(200)   # toward log

在此处输入图像描述

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

标签: ranimated-gifgganimate

解决方案


采用我对另一个问题的回答,这可以通过创建框架然后使用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) 

在此处输入图像描述


推荐阅读