Sweave: créer une série de figures

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Stéphane Laurent
Messages : 1557
Enregistré le : 05 Déc 2006, 19:07

Sweave: créer une série de figures

Messagepar Stéphane Laurent » 02 Aoû 2008, 14:27

Bonjour,

J'espérais utiliser Sweave pour créer une série de figures à l'aide d'une boucle: myfig-001.eps, myfig-002.eps,.... ceci afin de faire une animation avec le package animate pour LaTeX: http://wiki.mathematex.net/doku.php?id=latex:package_animate


Mais Sweave ne crée qu'une image par "chunk" ; par exemple si un chunk contient une boucle de plots:

Code : Tout sélectionner

for(i in 1:n){
    plot(x[i],y[i])
}


ça ne va créer que la dernière figure.

Y a-t-il un moyen de récupérer toutes les figures ?


Sinon j'ai pensé à faire une boucle de Sweave mais je ne sais pas si c'est possible dans le principe (je pense que oui), et même si ça l'est il y aurait des obstacles (par exemple le fichier figure créé va écraser le précédent):

Code : Tout sélectionner

<<>>=
for(i in 1:n){
           Sweave("subfile.Rnw") 
}
@


où "subfile.Rnw" contient le chunk

Code : Tout sélectionner

<<fig=TRUE>>=
plot(x[i],y[i])
@


et encore faudrait-il pouvoir contrôler le nom du fichier figure...


Voyez-vous comment personnaliser le nom du fichier figure ou/et une autre méthode pour parvenir à mes fins ?

Merci

Stéphane Laurent
Messages : 1557
Enregistré le : 05 Déc 2006, 19:07

Messagepar Stéphane Laurent » 02 Aoû 2008, 14:42

... j'ai trouvé une réponse dans la FAQ de Sweave:

A.9 Creating several figures from one figure chunk does not work
Consider that you want to create several graphs in a loop similar to
<<fig=TRUE>>
for (i in 1:4) plot(rnorm(100)+i)
@
16
This will currently not work, because Sweave allows only one graph per figure chunk. The
simple reason is that Sweave opens a postscript device before executing the code and closes it
afterwards. If you need to plot in a loop, you have to program it along the lines of
<<results=tex,echo=FALSE>>=
for(i in 1:4){
file=paste("myfile", i, ".eps", sep="")
postscript(file=file, paper="special", width=6, height=6)
plot(rnorm(100)+i)
dev.off()
cat("\\includegraphics{", file, "}\n\n", sep="")
}
@

Stéphane Laurent
Messages : 1557
Enregistré le : 05 Déc 2006, 19:07

Messagepar Stéphane Laurent » 02 Aoû 2008, 14:59

Ca marche. Très amusant ce package animate, vous devriez essayer. Et Sweave est idéal pour créer une série de figures :)


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité

cron