Utilisation de fonctions du package lattice dans une boucle

Questions sur les fonctions graphiques de R

Modérateur : Groupe des modérateurs

François Bonnot
Messages : 537
Enregistré le : 10 Nov 2004, 15:19
Contact :

Utilisation de fonctions du package lattice dans une boucle

Messagepar François Bonnot » 23 Jan 2006, 08:00

Bonjour,
Pour sortir un fichier postscript "f.ps" j'utilise habituellement la syntaxe suivante :

Code : Tout sélectionner

postscript("f.ps")
plot(1:10,(1:10)**2,type='l')
dev.off()

Pour sortir plusieurs fichiers on peut utiliser la boucle suivante :

Code : Tout sélectionner

for (i in 1:3){
  filename <- paste("f",i,".ps",sep="")
  postscript(filename)
  plot(1:10,i*(1:10)**2,type='l',main=paste("Graphe",i))
  dev.off()
}

On obtient bien les 3 fichiers f1.ps, f2.ps et f3.ps attendus.

Avec le package lattice la syntaxe devient, pour un seul fichier :

Code : Tout sélectionner

library(lattice)
trellis.device("postscript",file="g.ps")
xyplot((1:10)**2~(1:10),type='l')
dev.off()

Le fichier g.ps est correct.
Les problèmes commencent avec la boucle :

Code : Tout sélectionner

for (i in 1:3){
  filename <- paste("g",i,".ps",sep="")
  trellis.device("postscript",file=filename)
  xyplot(i*(1:10)**2~(1:10),type='l',main=paste("Graphe",i))
  dev.off()
}

On obtient 3 fichiers g1.ps, g2.ps et g3.ps qui sont bien de type postscript mais ne contiennent aucun graphe ! Où est l'erreur ?

PS. Si on remplace xyplot par une fonction non lattice (toujours avec trellis.device()) les 3 fichiers sont corrects. De plus si on met à la fois plot et xyplot seul les graphes réalisés avec plot sont sortis.

Matthieu Lesnoff
Messages : 120
Enregistré le : 29 Nov 2004, 12:41

print.trellis()

Messagepar Matthieu Lesnoff » 24 Jan 2006, 04:24

Ds ta boucle, apres avoir cree ton graphique et l'avoir mis dans un objet, je pense qu'il faut que tu utilises print.trellis(). A verifier ...

Matthieu

François Bonnot
Messages : 537
Enregistré le : 10 Nov 2004, 15:19
Contact :

Messagepar François Bonnot » 24 Jan 2006, 06:59

En effet, ça marche si je remplace xyplot(...) par print(xyplot(...))
(c'est en fait print.trellis() qui est appelée)

Merci Matthieu !

Romain François
Messages : 42
Enregistré le : 08 Déc 2005, 19:23
Contact :

plusieurs fichiers en sortie

Messagepar Romain François » 24 Jan 2006, 09:39

Bonjour,

Allez jeter un coup d'oeil à la FAQ 7.22 de R : Why do lattice/trellis graphics not work?

Sinon, un peu off-topic, mais bon .... il y a aussi la syntaxe suivante pour sortir plusieurs fichiers :

Code : Tout sélectionner

postscript("f%d.ps", onefile=FALSE)
for (i in 1:3){
  plot(1:10,i*(1:10)**2,type='l',main=paste("Graphe",i))
}
dev.off()


Retourner vers « Archives : Fonctions graphiques »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité