Graphics 从R中的一系列情节创建电影

Graphics 从R中的一系列情节创建电影,graphics,video,r,movieclip,movies,Graphics,Video,R,Movieclip,Movies,有没有一种简单的方法可以通过拼接几个情节来创作一部“电影”,在R?中,我不确定这在R中是否可行。我曾经做过一个项目,当R中的数据点被导出到MySQL数据库时,Flex/Flash应用程序拾取这些数据点并提供动画可视化效果。如果您将R脚本封装在一个更大的Perl/Python/etc.脚本中,您可以使用喜爱的命令行图像拼接工具将图形拼接在一起 要使用包装器脚本运行R脚本,请使用该方法。查看由创建的包或bioconductor包(?animate)。以下是我使用R帮助找到的一种方法: 要创建各个图像

有没有一种简单的方法可以通过拼接几个情节来创作一部“电影”,在R?

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

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


要使用包装器脚本运行R脚本,请使用该方法。

查看由创建的包或bioconductor包(?animate)。

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

要创建各个图像帧,请执行以下操作:

jpeg("/tmp/foo%02d.jpg")
for (i in 1:5) {
  my.plot(i)
}
dev.off()
要制作电影,请先安装。 然后调用以下函数(该函数调用“convert”,我想是ImageMagick的一部分):


make.mov我认为您也可以使用caTools库中的write.gif函数来实现这一点。您必须先将图形转换为多帧图像。我不知道该怎么做。任何人布勒

动画GIF的经典示例是以下代码,我没有编写,但不久前编写了:

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博士

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

下面是一个从HDF5文件制作动画GIF“电影”的完整示例。数据应为三维数组[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)

为什么您需要另一种语言来使用命令行工具?那么哪里需要Perl/Python脚本呢?另外,将Rscript(和littler)视为“R CMD BATCH”的更好替代品。您不需要其他语言。可以使用类似bash的shell。你要什么都行。有很多选择。我使用R CMD批处理,因为它或多或少是跨平台通用的。我发现一旦安装了ImageMagick和ffmpeg,它就非常容易了。你不需要数据库。在循环中,保存所有图像。然后使用命令行工具将它们缝合在一起;imagemagick是一种可能性。是的,这是最简单的方法。我想,由于操作系统的模块化,在R中真的不可能做到这一点,除非R使用特殊的库或类似的库进行编译。很多年前我就知道,当有人说“这不可能”时,他们的意思是“我不知道怎么做”。这个技巧的巧妙之处在于,在这样一个论坛上,一定会有人告诉你怎么做。顺便说一句,我不是在挖苦人。我真的认为这是一种很好的技术,我要尝试一下。谢谢Srirangan,当然。但基本上还是和我说的一样。R无法做到这一点,您需要依赖外部应用程序才能做到这一点。在我使用Flex/ActionScript的案例中,Ryan建议使用ImageMagick,但最终您依赖于外部应用程序。这就是我的观点。我并没有声称我的方法是唯一的方法同时调用数据库和闪存是一种双重的过度使用!您甚至可以将jpeg()和dev.off()保留在循环之外——如果您使用适当的文件名,例如jpeg(“/tmp/foo%02d.png”),R将在循环期间创建新文件。无需计算文件名。你应该做德克的修正,然后接受你自己的答案。好的解决方案。有用的。。。但是在R中运行函数“make.mov”后,发现很难理解.mpg文件保存在哪里?我在mac平台上的R studio中工作。当我运行
系统(“convert-delay 80*.png example\u 1.gif”)
时,我得到一个错误
无效参数-80
。我指定
ani.options(convert=shQuote('C:/Program Files/ImageMagick-7.0.5-Q16/convert.exe')#convert=shQuote('C:/Windows/System32/convert.exe'))
。有什么想法吗?文章的链接已经不存在了。更有趣的是,我只是在看
动画
软件包的文档,注意到它需要安装
ImageMagick
。我在最后一行遇到一个错误:“错误:write.gif(X)”中的意外输入对于上述错误-将代码最后一行
Mandelbrot.gif
周围的引号更改为常规引号(即删除它们并在脚本中键入新引号)
#
# 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)