【问题标题】:Creating a Movie from a Series of Plots in R [closed]从R中的一系列情节创建电影[关闭]
【发布时间】:2010-11-20 20:25:18
【问题描述】:

有没有一种简单的方法可以通过在 R 中将多个情节拼接在一起来创建“电影”?

【问题讨论】:

    标签: graphics video r movieclip movies


    【解决方案1】:

    我不确定在 R 中是否可行。我曾经做过一个项目,将 R 中的数据点导出到 MySQL 数据库,然后 Flex/Flash 应用程序拾取这些数据点并提供动画可视化..

    【讨论】:

    • 您不需要数据库。在一个循环中,保存所有图像。然后使用命令行工具将它们拼接在一起; imagemagick 是一种可能性。
    • 是的,这是最简单的方法。我猜由于操作系统的模块化,在 R 中确实不可能做到这一点,除非 R 是用特殊的库等编译的。
    • 这是一个聪明的技巧,Srirangan。多年前我了解到,当有人说“不可能”时,他们的意思是“我不知道该怎么做”。该技术的巧妙之处在于,在诸如 SO 之类的论坛中,一定会有人告诉您如何操作。顺便说一句,我不是在讽刺。我真的认为这是一个很好的技术,我会尝试一下。谢谢斯里兰根。
    • 当然。但这与我所说的基本相同。 R 无法做到这一点,您需要依赖外部应用程序来做到这一点。我举了我使用 Flex/ActionScript 的例子,Ryan 推荐使用 ImageMagick,但最终你依赖于外部应用程序。那是我的观点。我无处声称我的方式是唯一的方法。 ;)
    • 同时调用数据库和 Flash 实在是太过分了!
    【解决方案2】:

    如果您将 R 脚本包装在更大的 Perl/Python/etc 中。脚本,您可以使用您最喜欢的命令行图像拼接工具将图形拼接在一起。

    要使用包装脚本运行 R 脚本,请使用 R CMD BATCH 方法。

    【讨论】:

    • 为什么需要另一种语言来使用命令行工具?
    • 那么哪里需要 Perl/Python 脚本?此外,将 Rscript(和更小的)视为 'R CMD BATCH' 的更好替代品。
    • 您不需要其他语言。您可以使用 bash 之类的 shell。无论你想要什么。有很多选择。我使用 R CMD BATCH 因为它或多或少地跨平台通用。
    • 我发现ImageMagick 和 ffmpeg 安装后非常简单。
    【解决方案3】:

    查看Yihui Xie 创建的animation 包或EBImage bioconductor 包 (?animate)。

    【讨论】:

    • 有趣的是,我只是在查看animation 包的文档,发现它需要安装ImageMagick
    【解决方案4】:

    这是我使用 R 帮助找到的一种方法:

    创建单个图像帧:

    jpeg("/tmp/foo%02d.jpg")
    for (i in 1:5) {
      my.plot(i)
    }
    dev.off()
    

    要制作电影,首先安装ImageMagick。 然后调用以下函数(它调用“convert”,我想是 ImageMagick 的一部分):

    make.mov <- function(){
         unlink("plot.mpg")
         system("convert -delay 0.5 plot*.jpg plot.mpg")
    }
    

    或者尝试使用article 中描述的 ffmpeg 函数(我发现这会产生更清晰的结果): ffmpeg -r 25 -qscale 2 -i tmp/foo%02d.jpg output.mp4

    可能需要一些修修补补,但是一旦安装了所有东西,这似乎很简单。

    当然,在任何你看到“jpg”或“jpeg”的地方,你都可以用 GIF 或 PNG 来代替你的喜好。

    【讨论】:

    • 您甚至可以将 jpeg() 和 dev.off() 保留在循环之外——如果您使用适当的文件名,例如jpeg("/tmp/foo%02d.png"), R 只会在循环期间创建新文件。您无需计算文件名。让它变得更容易。
    • 您应该进行 Dirk 的修复,然后接受您自己的答案。很好的解决方案。
    • 有用...但是在 R 中运行函数“make.mov”后发现很难理解 .mpg 文件的保存位置?我在 Mac 平台上的 R studio 中工作。
    • 当我运行system("convert -delay 80 *.png example_1.gif") 时出现错误Invalid Parameter - 80。我指定ani.options( convert = shQuote('C:/Program Files/ImageMagick-7.0.5-Q16/convert.exe') # convert = shQuote('C:/Windows/System32/convert.exe') )。有什么想法吗?
    • 文章链接不存在
    【解决方案5】:

    我认为您也可以使用 caTools 库中的 write.gif 函数来执行此操作。您必须首先将您的图表转换为多帧图像。我不知道该怎么做。任何人?布勒?

    动画 GIF 的经典示例是这段代码,我没有写,但我前段时间写了blog about

    library(fields) # for tim.colors
    library(caTools) # for write.gif
    m = 400 # grid size
    C = complex( real=rep(seq(-1.8,0.6, length.out=m), each=m ), imag=rep(seq(-1.2,1.2, length.out=m), m ) )
    C = matrix(C,m,m)
    
    Z = 0
    X = array(0, c(m,m,20))
    for (k in 1:20) {
    Z = Z^2+C
    X[,,k] = exp(-abs(Z))
    }
    
    image(X[,,k], col=tim.colors(256)) # show final image in R
    write.gif(X, 'Mandelbrot.gif', col=tim.colors(256), delay=100)
    

    代码归功于 Jarek Tuszynski 博士。

    【讨论】:

    • 我在最后一行得到一个错误:“错误:“write.gif(X, “” "中的意外输入
    • 对于上述错误 - 将代码最后一行 Mandelbrot.gif 周围的引号更改为常规引号(即删除它们并在脚本中键入新引号)
    【解决方案6】:

    我使用 XNview(免费图形查看器)创建幻灯片功能制作了一些电影。我想用空间数据显示随时间变化的趋势,所以我只是创建了一系列图,按顺序命名 [paste() 是你各种命名 calistethics 的朋友] 然后将它们加载到 XNviews 幻灯片对话框中并设置一些计时器变量,瞧。花了大约 5 分钟的时间来学习如何做到这一点并生成一些可执行的图形。

    【讨论】:

      【解决方案7】:

      这里是一个完整的例子,关于从 HDF5 文件制作动画 GIF “电影”。数据应该是 3 维数组 [Nframes][Nrows][Ncolumns] 的 HDF 数据集。

      #
      # be sure to be run as Administrator to install new packages
      #
      source("http://bioconductor.org/biocLite.R")
      biocLite("rhdf5")
      install.packages('caTools')
      install.packages('fields')
      
      library(caTools)
      library(fields)
      library(rhdf5)
      
      x = h5read(file="mydata.h5",name="/Images")
      write.gif(x,"movie1.gif",col=rainbow,delay=10,flip=TRUE)
      

      【讨论】:

        猜你喜欢
        • 2017-07-16
        • 2011-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-08
        • 1970-01-01
        相关资源
        最近更新 更多