从R中的一系列情节创build电影
有没有一种简单的方法来创build一个“电影”通过拼接在R几个地块?
这里是我使用R帮助find的一种方法:
要创build单个图像帧:
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") }
或者尝试使用本文中描述的ffmpeg函数(我发现这会给出更清晰的结果):ffmpeg -r 25 -qscale 2 -i tmp / foo%02d.jpg output.mp4
可能需要一些修补,但是一旦安装完毕,这似乎很简单。
当然,在任何你看到“jpg”或“jpeg”的地方,都可以用GIF或PNG来替代你的幻想。
看看Yihui Xie创build的animation包或EBImage bioconductor软件包(?animate)。
我想你也可以用caTools库中的write.gif函数来做到这一点。 您必须首先将您的graphics转换为多帧图像。 我不知道该怎么做。 任何人? Bueller?
一个animationGIF的经典例子是我没有写的代码,但是我之前做过博客 :
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博士。
如果你把你的R脚本封装在一个更大的Perl / Python / etc中。 脚本,您可以使用您最喜欢的命令行图像拼接工具将graphics缝合在一起。
要使用包装器脚本运行R脚本,请使用R CMD BATCH
方法。
我不确定在R中是否有可能。我曾经做过一个项目,当R的数据点被导出到MySQL数据库时,一个Flex / Flash应用程序拾取了这些数据点并给出了animation可视化。
我已经使用XNview的(免费graphics浏览器)创build幻灯片function做了一些电影。 我想通过空间数据来显示时间趋势,所以我只创build了一系列的图表,按顺序命名[paste()是各种命名calistethics的朋友],然后将它们加载到XNviews幻灯片对话中,并设置一些计时器variables,瞧。 花了5分钟学习如何做,并产生一些可执行的graphics。
下面是一个完整的从HDF5文件制作GIF“animation”的例子。 数据应该是3维数组的HDF数据集[Nframes] [Nrows] [Ncolumns]。
# # 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)