Localisation d'une fenetre graphique trellis dans l'ecran

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

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

Localisation d'une fenetre graphique trellis dans l'ecran

Messagepar Matthieu Lesnoff » 04 Mai 2007, 06:41

Bonjour

J'ai une fonction qui produit 3 graphiques trellis (j'utilise lattice). Ces trois graphiques doivent etre affiches dans 3 fenetres differentes.

Je souhaiterais pouvoir fixer la localisation de ces 3 fenetres sur l'ecran.

Pour l'instant, je m'en sors en donnant des tailles differentes aux 3 fenetres (ceci permet de ne pas avoir 3 fenetres exactement superposees et de pouvoir les selectionner facilement pour les deplacer avec le curseur) :

Code : Tout sélectionner


    trellis.device()
    print(graph1)
    trellis.device(width = 6)
    print(graph2)
    trellis.device(width = 5)
    print(graph3)



Je n'ai pas trouve comment fixer direcetment la localisation d'une fenetre graphique trellis dans l'ecran. Quelqu'un connait-il une manip simple ?

Matthieu

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

Messagepar Renaud Lancelot » 05 Mai 2007, 18:31

Salut Matthieu,

Les solutions sont dépendantes du système d'exploitation et de la manière dont tu utilises R: sous Windows, Rgui ou Rterm, et sous Rgui, pas la même chose selon que l'on est en mode MDI ou SDI.

En plus, l'affichage dépend de la taille de l'écran et du driver utilisé.

En admettant que tu imposes aux utilisateurs du package de travailler sous Windows avec Rgui, la solution suivante fonctionne (testée en mode SDI):

Code : Tout sélectionner

library(lattice)
x <- 1:10
y <- rnorm(10)

trellis.device("windows", xpos = 0, ypos = 0, width = 3, height = 3)
xyplot(y ~ x, type = "o", pch = 19, main = "scatterplot")
bringToTop(stay = TRUE)

trellis.device("windows", xpos = 350, ypos = 0, width = 3, height = 3)
dotplot(letters[1:10] ~ y, main = "dotplot")
bringToTop(stay = TRUE)

trellis.device("windows", xpos = 700, ypos = 0, width = 3, height = 3)
bwplot(~ y, main = "boxplot")
bringToTop(stay = TRUE)


Commentaires:

* Le device "windows" est celui utilisé par défaut par trellis.device (pour les utilisateurs de MS Windows), la fonction utilisée pour tracer les graphes trellis.
* Les arguments xpos, ypos, width et height sont en fait passés à la fonction windows,
* xpos et ypos permettent de positionner la fenêtre sur l'écran. Ils sont exprimés en pixels, ce qui fait que le rendu sera différent selon la résolution de l'écran (le mien est en 1280 x 800). Il y a des fonctions permettant de déterminer la résolution de l'écran. On peut donc imaginer des calculs permettant de déterminer xpos et ypos de manière pertinente selon la résolution de l'écran de l'utilisateur du package. A fouiller.
* width et height donnent la taille de la fenètre en pouces.

Je ne sais pas comment adapter l'exemple pour Linux et OSX

Amicalement,

Renaud

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

Messagepar Renaud Lancelot » 05 Mai 2007, 23:40

Si c'est compatible avec ce que tu as en tête, tu peux affecter les graphes dans des objets et les imprimer ensuite en les organisant comme tu veux. La fonction print.trellis est une option. Je pense que tu la connais. Une autre solution est de passer par le package grid qui permet des présentations très complexes et qui rendent en général mieux que print.trellis:

Code : Tout sélectionner

library(lattice)
library(grid)
x <- 1:10
y <- rnorm(10)
gr1 <- xyplot(y ~ x, type = "o", pch = 19, main = "scatterplot")
gr2 <- dotplot(letters[1:10] ~ y, main = "dotplot")
gr3 <- bwplot(~ y, main = "boxplot")

pushViewport(viewport(layout = grid.layout(1, 3,
                                           respect = rbind(c(1, 1, 1)))))

pushViewport(viewport(layout.pos.col = 1, layout.pos.row = 1))
print(gr1, newpage = FALSE)
popViewport()

pushViewport(viewport(layout.pos.col = 2, layout.pos.row = 1))
print(gr2, newpage = FALSE)
popViewport()

pushViewport(viewport(layout.pos.col = 3, layout.pos.row = 1))
print(gr3, newpage = FALSE)
popViewport()

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

Messagepar Matthieu Lesnoff » 07 Mai 2007, 05:46

Salut Renaud


Merci pour cette reponse detaillee.

Les trois solutions que tu presentes me conviennent : trellis.device avec xpos/ypos, print.trellis avec position ou grid. Je n'ai maintenant que l'embarras du choix et je verrai a l'usage.

Merci beaucoup

Matthieu


Retourner vers « Questions en cours »

Qui est en ligne

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