【发布时间】:2010-11-20 20:25:18
【问题描述】:
有没有一种简单的方法可以通过在 R 中将多个情节拼接在一起来创建“电影”?
【问题讨论】:
标签: graphics video r movieclip movies
有没有一种简单的方法可以通过在 R 中将多个情节拼接在一起来创建“电影”?
【问题讨论】:
标签: graphics video r movieclip movies
我不确定在 R 中是否可行。我曾经做过一个项目,将 R 中的数据点导出到 MySQL 数据库,然后 Flex/Flash 应用程序拾取这些数据点并提供动画可视化..
【讨论】:
如果您将 R 脚本包装在更大的 Perl/Python/etc 中。脚本,您可以使用您最喜欢的命令行图像拼接工具将图形拼接在一起。
要使用包装脚本运行 R 脚本,请使用 R CMD BATCH 方法。
【讨论】:
这是我使用 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 来代替你的喜好。
【讨论】:
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') )。有什么想法吗?
我认为您也可以使用 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 博士。
【讨论】:
Mandelbrot.gif 周围的引号更改为常规引号(即删除它们并在脚本中键入新引号)
我使用 XNview(免费图形查看器)创建幻灯片功能制作了一些电影。我想用空间数据显示随时间变化的趋势,所以我只是创建了一系列图,按顺序命名 [paste() 是你各种命名 calistethics 的朋友] 然后将它们加载到 XNviews 幻灯片对话框中并设置一些计时器变量,瞧。花了大约 5 分钟的时间来学习如何做到这一点并生成一些可执行的图形。
【讨论】:
这里是一个完整的例子,关于从 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)
【讨论】: