Aligner des graphiques

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

camille mariot
Messages : 15
Enregistré le : 09 Nov 2006, 12:38

Aligner des graphiques

Messagepar camille mariot » 05 Déc 2006, 15:05

Bonjour,

J'ai des données sur diverses mesures réalisées à 5 moments différents (t0 t5 t10 t15 et t20). Je souhaite les représenter sur autant de graphes que j'ai de mesures, mais j'aimerais les aligner verticalement avec une seule et même échelle des x (et donc coller les fenêtres graphiques verticalement).
Pour l'instant, avec un par(mfrow(c(4,4))), (j'ai 13 graphes) je n'arrive qu'à les représenter séparément sur la même feuille.

Comment faire?

1s 5s 6m 12m 24m
mes 4.9 3.4 3.6 3.5 3.8
me 71.3 185 146.4 134.7 128.1
itofle 72.9 163.3 120 125.4 99.3
pilpc 26.8 37.6 37 37.8 38.1
suat 287.5 462.5 420.5 411.9 413.9
dds 19.5 0.7 5.2 5.4 7.5
dal 36.5 17.6 21.8 19.2 24.2
dal2 49.4 29.2 34.2 34.9 38.8
lcs 27.6 13.1 16.3 16.8 18.2
dwl 56.1 29.4 32.4 31.1 34.7
h 16 10.6 12.4 12.3 12.2
ada 9.8 7.3 8.1 7.8 7.7
ha 6.6 3.7 4.4 4.5 4.5


par(mfrow=c(4,4))
par(bty='l')
for (i in 1:13)
{plot(t(tableau[i,]),ylim=c(0,max(tableau[i,])),type='b',ylab=
row.names(tableau)[i],col='red',pty='s',xaxt="n",pch=7,
frame.plot=T)
mtext("Evolution des mesures",outer=T)
}

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Messagepar Logez Maxime » 05 Déc 2006, 17:27

Bonjour,

Si tu veux obtenir autant de graph que de mesure soit tu les ouvres dans des fenêtres séparées avec la fonction x11() que tu rajoutes dans ta boucle avant de faire le plot, ou bien tu les mets dans un pdf par exemple avec :

pdf("nom.pdf")
boucle
dev.off()
tu peux mettres ton texte dans main plutôt que dans mtext mais la c'est a toi de voir

En espérant avoir répondu à ta question car j'avoue ne pas l'avoir trop comprise.

Maxime
[/code]

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 05 Déc 2006, 18:05

Voici une solution combinant les fonctions reshape et xyplot (package lattice pour cette dernière):

Code : Tout sélectionner

> tab
          1s    5s    6m   12m   24m
mes      4.9   3.4   3.6   3.5   3.8
me      71.3 185.0 146.4 134.7 128.1
itofle  72.9 163.3 120.0 125.4  99.3
pilpc   26.8  37.6  37.0  37.8  38.1
suat   287.5 462.5 420.5 411.9 413.9
dds     19.5   0.7   5.2   5.4   7.5
dal     36.5  17.6  21.8  19.2  24.2
dal2    49.4  29.2  34.2  34.9  38.8
lcs     27.6  13.1  16.3  16.8  18.2
dwl     56.1  29.4  32.4  31.1  34.7
h       16.0  10.6  12.4  12.3  12.2
ada      9.8   7.3   8.1   7.8   7.7
ha       6.6   3.7   4.4   4.5   4.5
>
>
> tab2 <- reshape(tab,
+                 idvar = "Variable",
+                 ids = row.names(tab),
+                 times = names(tab),
+                 timevar = "Temps",
+                 varying = list(names(tab)),
+                 direction = "long")
> names(tab2)[2] <- "Valeur"
> tab2$Temps <- factor(tab2$Temps, levels = c("1s", "5s", "6m", "12m", "24m"))
> tab2
           Temps Valeur Variable
mes.1s        1s    4.9      mes
me.1s         1s   71.3       me
itofle.1s     1s   72.9   itofle
pilpc.1s      1s   26.8    pilpc
suat.1s       1s  287.5     suat
dds.1s        1s   19.5      dds
dal.1s        1s   36.5      dal
dal2.1s       1s   49.4     dal2
lcs.1s        1s   27.6      lcs
dwl.1s        1s   56.1      dwl
h.1s          1s   16.0        h
ada.1s        1s    9.8      ada
ha.1s         1s    6.6       ha
mes.5s        5s    3.4      mes
me.5s         5s  185.0       me
itofle.5s     5s  163.3   itofle
pilpc.5s      5s   37.6    pilpc
suat.5s       5s  462.5     suat
dds.5s        5s    0.7      dds
dal.5s        5s   17.6      dal
dal2.5s       5s   29.2     dal2
lcs.5s        5s   13.1      lcs
dwl.5s        5s   29.4      dwl
h.5s          5s   10.6        h
ada.5s        5s    7.3      ada
ha.5s         5s    3.7       ha
mes.6m        6m    3.6      mes
me.6m         6m  146.4       me
itofle.6m     6m  120.0   itofle
pilpc.6m      6m   37.0    pilpc
suat.6m       6m  420.5     suat
dds.6m        6m    5.2      dds
dal.6m        6m   21.8      dal
dal2.6m       6m   34.2     dal2
lcs.6m        6m   16.3      lcs
dwl.6m        6m   32.4      dwl
h.6m          6m   12.4        h
ada.6m        6m    8.1      ada
ha.6m         6m    4.4       ha
mes.12m      12m    3.5      mes
me.12m       12m  134.7       me
itofle.12m   12m  125.4   itofle
pilpc.12m    12m   37.8    pilpc
suat.12m     12m  411.9     suat
dds.12m      12m    5.4      dds
dal.12m      12m   19.2      dal
dal2.12m     12m   34.9     dal2
lcs.12m      12m   16.8      lcs
dwl.12m      12m   31.1      dwl
h.12m        12m   12.3        h
ada.12m      12m    7.8      ada
ha.12m       12m    4.5       ha
mes.24m      24m    3.8      mes
me.24m       24m  128.1       me
itofle.24m   24m   99.3   itofle
pilpc.24m    24m   38.1    pilpc
suat.24m     24m  413.9     suat
dds.24m      24m    7.5      dds
dal.24m      24m   24.2      dal
dal2.24m     24m   38.8     dal2
lcs.24m      24m   18.2      lcs
dwl.24m      24m   34.7      dwl
h.24m        24m   12.2        h
ada.24m      24m    7.7      ada
ha.24m       24m    4.5       ha
>
>
> library(lattice)
> # échelle commune
> xyplot(Valeur ~ Temps | Variable, data = tab2, type = "b")
> # échelle indépendante
> xyplot(Valeur ~ Temps | Variable, data = tab2, type = "b", scales = list(relation = "free"))


Renaud

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Messagepar Logez Maxime » 05 Déc 2006, 18:47

Re,

Bon un peu plus de temps pour répondre. Si tu veux effectivement mettre tes graphiques en verticale pour voir tes graphiques en haut en bas, il te suffit de partitionner ta fenêtre en spécifiant que tu veux tes graphs sur une seule colonne et sur 13 lignes :

Code : Tout sélectionner

par(mfrow=c([b]13[/b],1),mar=c(1,1,0,0))


Après il te suffit de lancer ta boucle


Code : Tout sélectionner

for (i in 1:13){
plot(t(test[i,]),ylim=c(0,max(test[i,])),type='b',ylab=
row.names(test)[i],col='red',xaxt="n",pch=7,
frame.plot=T)


Personnellement j'ai eu des problèmes d'affichage et je suis obligé de modifier les marges. De plus ce n'est pas facile à lire.

Une autre façon de faire est d'utiliser la fontion layout :

Code : Tout sélectionner

layout(matrix(1:13,13,1))


Après tu relances ta boucle et tu obtiens un résultat équivalent.

En espérant t'avoir aidé.

Maxime

camille mariot
Messages : 15
Enregistré le : 09 Nov 2006, 12:38

Messagepar camille mariot » 06 Déc 2006, 08:36

Renaud Lancelot a écrit :Voici une solution combinant les fonctions reshape et xyplot (package lattice pour cette dernière):

Code : Tout sélectionner

> tab
          1s    5s    6m   12m   24m
mes      4.9   3.4   3.6   3.5   3.8
me      71.3 185.0 146.4 134.7 128.1
itofle  72.9 163.3 120.0 125.4  99.3
pilpc   26.8  37.6  37.0  37.8  38.1
suat   287.5 462.5 420.5 411.9 413.9
dds     19.5   0.7   5.2   5.4   7.5
dal     36.5  17.6  21.8  19.2  24.2
dal2    49.4  29.2  34.2  34.9  38.8
lcs     27.6  13.1  16.3  16.8  18.2
dwl     56.1  29.4  32.4  31.1  34.7
h       16.0  10.6  12.4  12.3  12.2
ada      9.8   7.3   8.1   7.8   7.7
ha       6.6   3.7   4.4   4.5   4.5
>
>
> tab2 <- reshape(tab,
+                 idvar = "Variable",
+                 ids = row.names(tab),
+                 times = names(tab),
+                 timevar = "Temps",
+                 varying = list(names(tab)),
+                 direction = "long")
> names(tab2)[2] <- "Valeur"
> tab2$Temps <- factor(tab2$Temps, levels = c("1s", "5s", "6m", "12m", "24m"))
> tab2
           Temps Valeur Variable
mes.1s        1s    4.9      mes
me.1s         1s   71.3       me
itofle.1s     1s   72.9   itofle
pilpc.1s      1s   26.8    pilpc
suat.1s       1s  287.5     suat
dds.1s        1s   19.5      dds
dal.1s        1s   36.5      dal
dal2.1s       1s   49.4     dal2
lcs.1s        1s   27.6      lcs
dwl.1s        1s   56.1      dwl
h.1s          1s   16.0        h
ada.1s        1s    9.8      ada
ha.1s         1s    6.6       ha
mes.5s        5s    3.4      mes
me.5s         5s  185.0       me
itofle.5s     5s  163.3   itofle
pilpc.5s      5s   37.6    pilpc
suat.5s       5s  462.5     suat
dds.5s        5s    0.7      dds
dal.5s        5s   17.6      dal
dal2.5s       5s   29.2     dal2
lcs.5s        5s   13.1      lcs
dwl.5s        5s   29.4      dwl
h.5s          5s   10.6        h
ada.5s        5s    7.3      ada
ha.5s         5s    3.7       ha
mes.6m        6m    3.6      mes
me.6m         6m  146.4       me
itofle.6m     6m  120.0   itofle
pilpc.6m      6m   37.0    pilpc
suat.6m       6m  420.5     suat
dds.6m        6m    5.2      dds
dal.6m        6m   21.8      dal
dal2.6m       6m   34.2     dal2
lcs.6m        6m   16.3      lcs
dwl.6m        6m   32.4      dwl
h.6m          6m   12.4        h
ada.6m        6m    8.1      ada
ha.6m         6m    4.4       ha
mes.12m      12m    3.5      mes
me.12m       12m  134.7       me
itofle.12m   12m  125.4   itofle
pilpc.12m    12m   37.8    pilpc
suat.12m     12m  411.9     suat
dds.12m      12m    5.4      dds
dal.12m      12m   19.2      dal
dal2.12m     12m   34.9     dal2
lcs.12m      12m   16.8      lcs
dwl.12m      12m   31.1      dwl
h.12m        12m   12.3        h
ada.12m      12m    7.8      ada
ha.12m       12m    4.5       ha
mes.24m      24m    3.8      mes
me.24m       24m  128.1       me
itofle.24m   24m   99.3   itofle
pilpc.24m    24m   38.1    pilpc
suat.24m     24m  413.9     suat
dds.24m      24m    7.5      dds
dal.24m      24m   24.2      dal
dal2.24m     24m   38.8     dal2
lcs.24m      24m   18.2      lcs
dwl.24m      24m   34.7      dwl
h.24m        24m   12.2        h
ada.24m      24m    7.7      ada
ha.24m       24m    4.5       ha
>
>
> library(lattice)
> # échelle commune
> xyplot(Valeur ~ Temps | Variable, data = tab2, type = "b")
> # échelle indépendante
> xyplot(Valeur ~ Temps | Variable, data = tab2, type = "b", scales = list(relation = "free"))


Renaud


Merci beaucoup!! Le seul souci a été dans le
> tab2$Temps <- factor(tab2$Temps, levels = c("1s", "5s", "6m", "12m", "24m"))
.

Comme les valeurs de départ s'appelaient X1s X5s X6m X12m et X24m, R les classait dans l'ordre
X12m X1s X24m X5s X6m et donc le recodage était complètement décalé. j'ai donc appelé les variables de début en X11s X25s X36m X412m et X524m pour que le recodage

> tab2$Temps <- factor(tab2$Temps, levels = c("1s", "5s", "6m", "12m", "24m"))
.

se fasse bien. Il ne me reste plus qu'à affiner l'allure des graphes.

Merci beaucoup!

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 06 Déc 2006, 12:09

Pour la disposition des graphes, regarder l'argument layout de la fct xyplot qui permet de définir la disposition des graphes sur une page ainsi que le nombre de pages.

Dans la section "Scripts et fonctions R", vous trouverez des scripts d'analyses comportant plusieurs exemples d'utilisation des graphes Trellis (package lattice).

Il y a eu également plusieurs questions sur ce sujet sur ce forum. Enfin, voir le site "historique" des graphes Trellis, où bcp de documents, jeux de données et exemples traités sont disponibles:

http://stat.bell-labs.com/project/trellis/

Renaud


Retourner vers « Questions en cours »

Qui est en ligne

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