web-dev-qa-db-fra.com

Création d'un film à partir d'une série de tracés dans R

Existe-t-il un moyen facile de créer un "film" en assemblant plusieurs tracés, dans R?

47
Ryan R. Rosario

Voici une méthode que j'ai trouvée en utilisant l'aide de R:

Pour créer les cadres d'image individuels:

jpeg("/tmp/foo%02d.jpg")
for (i in 1:5) {
  my.plot(i)
}
dev.off()

Pour faire le film, installez d'abord ImageMagick . Appelez ensuite la fonction suivante (qui appelle "convertir", une partie d'ImageMagick je suppose):

make.mov <- function(){
     unlink("plot.mpg")
     system("convert -delay 0.5 plot*.jpg plot.mpg")
}

Ou essayez d'utiliser la fonction ffmpeg comme décrit dans ce article (j'ai trouvé que cela donne des résultats plus nets): ffmpeg -r 25 -qscale 2 -i tmp/foo% 02d.jpg output.mp4

Peut nécessiter un peu de bricolage, mais cela semblait assez simple une fois que tout était installé.

Bien sûr, partout où vous voyez "jpg" ou "jpeg", vous pouvez remplacer GIF ou PNG selon vos envies.

40
Ryan R. Rosario

Jetez un œil au package animation créé par Yihui Xie ou au package bioconducteur EBImage (? Animate).

14
Paolo

Je pense que vous pouvez le faire aussi avec la fonction write.gif de la bibliothèque caTools. Vous devez d'abord placer votre graphique dans une image à plusieurs images. Je ne sais pas comment faire ça. N'importe qui? Bueller?

L'exemple classique d'un GIF animé est ce code que je n'ai pas écrit mais que j'ai fait blog about il y a quelque temps:

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)

Le mérite du code revient à Jarek Tuszynski, PhD.

10
JD Long

Si vous enveloppez votre script R dans un Perl/Python/etc plus grand. , vous pouvez assembler des graphiques avec votre outil d'assemblage d'images en ligne de commande préféré.

Pour exécuter votre script R avec un script wrapper, utilisez le R CMD BATCH méthode.

2
Alex Reynolds

J'ai fait quelques films en utilisant la fonction Créer un diaporama de XNview (visualiseur graphique gratuit). Je voulais montrer les tendances à travers le temps avec des données spatiales, alors je viens de créer une série de tracés, nommés séquentiellement [paste () est votre ami pour toutes sortes de calistéthiques de dénomination], puis les ai chargés dans le dialogue de diaporama XNviews et défini quelques variables de minuterie, le tour est joué. Il a fallu environ 5 minutes pour apprendre à le faire et produire des graphiques exécutables.

0
kpierce8

Voici un exemple complet sur la création d'un "film" GIF animé à partir d'un fichier HDF5. Les données doivent être un ensemble de données HDF d'un tableau tridimensionnel [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)
0
Mark Lakata

Je ne suis pas sûr que ce soit possible dans R. J'ai fait un projet une fois lorsque les points de données de R ont été exportés vers une base de données MySQL et qu'une application Flex/Flash a récupéré ces points de données et a donné des visualisations animées.

0
Sri