【问题标题】:Creating GIF Animations in R在 R 中创建 GIF 动画
【发布时间】:2021-11-29 09:43:14
【问题描述】:

假设我有以下三个图(在 R 中):

p1 = hist(rnorm(1000,1,1), 10000)
p2 = hist(rnorm(1000,1,1), 10000)
p3 = hist(rnorm(1000,1,1), 10000)

有什么办法可以把这些做成“gif”吗?

例如:

library(gifski)
gif_file <- ( "C:/Users/OneDrive/Documents/ref.gif")
save_gif((p1, p2, p3), gif_file, 1280, 720, res = 144)

我不确定此语句是否打算以这种方式使用。有谁知道这是否可能?

(注意:我知道您可以使用循环来执行此操作(即使用循环创建 p1、p2、p3),但我特别想知道当 p1、p2、p3 已经完成时是否可以执行此操作创建)。

谢谢!

【问题讨论】:

    标签: r animation plot data-visualization data-manipulation


    【解决方案1】:

    这是一种方法。只需按照help("gifski") 中的最后一个示例即可。

    library(gifski)
    
    makeplot <- function(){
      p1 = hist(rnorm(1000,1,1), 10000)
      p2 = hist(rnorm(1000,1,1), 10000)
      p3 = hist(rnorm(1000,1,1), 10000)
    }
    
    set.seed(2021)
    
    gif_file <- "~/tmp/ref.gif"
    save_gif(makeplot(), gif_file, 1280, 720, res = 144)
    
    utils::browseURL(gif_file)
    

    编辑

    要在绘图已存在时创建 GIF 文件,必须分两步完成。首先从绘图中创建 PNG 文件,然后创建 GIF 动画。

    set.seed(2021)
    p1 <- hist(rnorm(1000,1,1), 10000)
    p2 <- hist(rnorm(1000,1,1), 10000)
    p3 <- hist(rnorm(1000,1,1), 10000)
    
    plot_list <- list(p1, p2, p3)
    
    png_path <- file.path(tempdir(), "frame%03d.png")
    png(png_path)
    lapply(plot_list, plot)
    #[[1]]
    #NULL
    #
    #[[2]]
    #NULL
    #
    #[[3]]
    #NULL
    
    dev.off()
    #RStudioGD 
    #        2 
    
    png_files <- sprintf(png_path, seq_along(plot_list))
    gif_file2 <- "~/tmp/ref2.gif"
    
    gifski(png_files, gif_file2)
    #Inserting image 3 at 2.00s (100%)...
    #Encoding to gif... done!
    #[1] "/home/rui/tmp/ref2.gif"
    
    utils::browseURL(gif_file2)
    

    最后的清理

    unlink(gif_file)
    unlink(gif_file2)
    unlink(png_files)
    

    【讨论】:

      猜你喜欢
      • 2018-08-25
      • 1970-01-01
      • 2014-03-02
      • 2010-11-14
      • 2011-07-18
      • 2011-01-13
      • 2023-03-20
      相关资源
      最近更新 更多