Создание фильма из серии сюжетов в R

Есть ли простой способ создать "фильм", соединив несколько сюжетов внутри R?

7 ответов

Решение

Вот один метод, который я нашел с помощью справки 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")
}

Или попробуйте использовать функцию ffmpeg, как описано в этой статье (я нашел, что это дает более чистые результаты): ffmpeg -r 25 -qscale 2 -i tmp/foo%02d.jpg output.mp4

Может потребоваться немного поработать, но после установки все казалось довольно простым.

Конечно, везде, где вы видите "jpg" или "jpeg", вы можете заменить GIF или PNG в соответствии со своими предпочтениями.

Посмотрите либо на пакет анимации, созданный Yihui Xie, либо на пакет биокондуктора EBImage (? Animate).

Я думаю, что вы можете сделать это также с помощью функции write.gif в библиотеке caTools. Сначала вы должны поместить свой график в многокадровое изображение. Я не уверен, как это сделать. Кто-нибудь? Bueller?

Классический пример анимированного 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)

Код кредита идет к Яреку Тушинскому, PhD.

Если вы поместите свой R-скрипт в более крупный Perl/Python/ и т. Д. Сценарий, вы можете сшить графики вместе с вашим любимым инструментом для сшивания изображений командной строки.

Чтобы запустить скрипт R с помощью скрипта-обертки, используйте R CMD BATCH метод.

Я не уверен, что это возможно в R. Я однажды делал проект, когда точки данных из R экспортировались в базу данных MySQL, и приложение Flex/Flash подобрало эти точки данных и дало анимированные визуализации.

Я снял несколько фильмов, используя функцию создания слайд-шоу XNview (бесплатной программы просмотра графики). Я хотел показывать тренды во времени с пространственными данными, поэтому я просто создал серию графиков, названных последовательно [paste() - ваш друг для всех видов названий калибстов), затем загрузил их в диалог слайд-шоу XNviews и установил несколько переменных таймера, вуаля. Потребовалось около 5 минут, чтобы научиться делать это и создавать исполняемую графику.

Вот полный пример создания анимированного GIF-фильма из файла HDF5. Данные должны представлять собой набор данных 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)
Другие вопросы по тегам