有没有一种简单的方法可以通过在R内拼接几个图来创建“电影”?从R系列图中创建电影
回答
这是一个方法,我发现,使用R帮助:
要创建单独的图像帧:
jpeg("/tmp/foo%02d.jpg")
for (i in 1:5) {
my.plot(i)
}
dev.off()
拍电影,第一次安装ImageMagick。 然后调用下面的函数(所谓的“转化”,我想的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来替代你的幻想。
我不知道这是可能的R.我做了一个项目时,一次从R数据点被导出到一个MySQL数据库和一个Flex/Flash应用程序拿起这些数据点又给动画视觉化..
您不需要数据库。在一个循环中,保存所有图像。然后使用命令行工具将它们拼接在一起; imagemagick是一种可能性。 – 2009-08-19 12:14:50
是的,这是最简单的方法。我想由于操作系统的模块化,除非R是用特殊的库或类似的东西编译的,否则在R中不可能这样做。 – 2009-08-19 15:07:51
这是一个聪明的技巧,Srirangan。 很多年前我学到,当有人说'这不可能'时,他们的意思是'我不知道该怎么做'。 该技巧的巧妙之处在于,在诸如SO这样的论坛中,有人必然会告诉你如何去做。顺便说一句,我并不是讽刺。我真的认为这是一种很好的技术,我会尝试一下。谢谢Srirangan。 – pavium 2009-08-20 00:09:23
如果你将R脚本封装在更大的Perl/Python /等内。脚本,您可以将图形与您喜欢的命令行图像拼接工具一起缝合。
要使用包装脚本运行R脚本,请使用R CMD BATCH
方法。
为什么你需要另一种语言来使用命令行工具? – hadley 2009-08-19 12:12:18
那么需要Perl/Python脚本?另外,将Rscript(和littler)看作是'R CMD BATCH'的更好替代品。 – 2009-08-19 12:12:47
你不需要另一种语言。你可以使用像bash这样的shell。任何你想要的。有很多选择。我使用R CMD BATCH,因为它在多个平台上或多或少是通用的。 – 2009-08-19 14:14:44
我想你也可以用caTools库中的write.gif函数来做到这一点。你必须先把你的图形变成一个多帧图像。我不知道该怎么做。任何人? Bueller?
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)
代码归功于亚雷克Tuszynski,博士学位。
我已经做了一些使用XNview的(免费图形浏览器)创建幻灯片功能的电影。我想通过空间数据显示时间趋势,所以我只创建了一系列图,按顺序命名[paste()是各种命名calistethics的朋友],然后将它们加载到XNviews幻灯片对话框中,并设置一些计时器变量,瞧。花了5分钟来学习如何做,并产生一些可执行的图形。
下面是从HDF5文件制作动画GIF“电影”的完整示例。数据应该是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)
- 1. 如何通过perl从一系列图像创建Quicktime电影?
- 2. 如何从一系列生成的图像创建Quicktime电影?
- 3. WP7:从位图图像创建电影
- 4. 从R系列宣传单地图创建一个gif
- 5. 从一系列图像创建视频?
- 6. 从R中的白噪声创建一个ARCH系列
- 7. 从变量创建电子邮件R
- 8. 从IMDb获取人与电影/电视系列片的奖项
- 9. 从系列创建预测
- 10. 从(x,y)中创建热图在R
- 11. R:在投影坐标系上创建一个协变量
- 12. 在图表中动态创建系列
- 13. 导出通过循环变量列表创建的一系列图(在R中)
- 14. 如何构建电影推荐系统?
- 15. 是否可以用ffmpeg创建示例电影(迷你电影)?
- 16. 如何从电影中创建动画.gif?
- 17. 如何从c#中的一组图像创建H.264编码的电影?
- 18. 如何从图像*与图像之间的转换创建电影*
- 19. R如何创建单列表热图
- 20. 用avassetwriter创建动画电影文件
- 21. iPhone创建模态电影窗口
- 22. 我可以手动创建电影吗?
- 23. 为iPhone创建参考电影
- 24. 创建用户电影评级数组
- 25. 用R中的循环创建时间系列
- 26. R:如何从多列频率数据创建条形图?
- 27. 在R中为单个列创建一个列图
- 28. 创建r中
- 29. 创建r中
- 30. 创建R中
您甚至可以将jpeg()和dev.off()保留在循环之外 - 如果您使用适当的文件名作为例如jpeg(“/ tmp/foo%02d.png”),R会在你的循环中简单地创建新文件。不需要你计算文件名。使它更容易。 – 2009-08-19 15:36:41
你应该让Dirk的修复,然后接受你自己的答案。好的解决方案 – 2009-08-19 15:47:10
很有用...但在R中运行函数'make.mov'后发现很难理解.mpg文件的保存位置?我正在R平台上工作。 – ToNoY 2014-10-04 04:30:43