Re: étiquettes superposées

From: Stephane DRAY (dray@biomserv.univ-lyon1.fr)
Date: Mon Nov 22 2004 - 21:29:13 MET

  • Next message: Charline LAURENT: "régression logistique multinomiale"

    Suite aux commentaires de Jean,

    j'ai modifie la fonction zoom. la nouvelle fonction zoom2 permet de zoomer,
    et rezoomer sur la meme fenetre. Une seconde fenetre permet de voir ou on
    est dans le graphique original.
    q pour quitter
    r pour revenir a la fenetre originale
    c pour continuer a zoomer
    b pour revenir au zoom precedent

    Il y a un probleme pour afficher les rectangles. La cause est certainement
    le par(mar=...)) dans les fonctions graphiques d'ade. Je ne sais pas si le
    parametre est dans toutes les fonctions graphique d'ade. Je n'ai donc pas
    integre pour le moment le parametre par(mar) dans ma fonction zoom2. Pour
    le moment, la fonction marche avec des plot quelconques. Si on veut inclure
    le par(mar=) il faudrait l'obliger a fonctionner uniquement avec les
    fonctions s.quelquechose d'ade4.
    De la meme facon, si on se reduit a l'utilisation a quelques fonctions
    (s.label, ...), on pourra facilement implementer les options proposees par
    Jean.
    find("point1", ..)...

    Pour simplifier la chose, on pourrait s'assurer que les fonctions
    graphiques renvoie leur call.
    par le code invisible(match.call())
    des fonctions zoom, find, ... travaillerait alors sur ces call.

    zoom2 <- function(call.graph){
         appel<-as.list(match.call())
         appel.plot <- as.call(appel$call.graph)
         windows(3,3)
         eval(appel.plot, sys.frame(0))
         appel.list <- as.list(appel.plot)
         dev0 <- dev.cur()
         windows()
         dev1 <- dev.cur()
         eval(appel.plot, sys.frame(0))
         finished <- "c"
         k <- 0
         i <- NA
         xlim.old <- matrix(0,0,2)
         ylim.old <- matrix(0,0,2)
         while(finished!="q"){
             dev.set(dev1)
             if(finished=="b"){
                 print(i)
                 if(is.na(i)) i <- k
                 i <- i-1
                 if (i>0) {
                     k <- k+1
                     xy$x <- xlim.old[i,]
                     xy$y <- ylim.old[i,]
                     dev.set(dev0)
                     eval(appel.plot, sys.frame(0))
                     if(!(is.na(xy$x[1]) | is.na(xy$y[1]))) {
                         rect(xy$x[1],xy$y[1],xy$x[2],xy$y[2],border="red",lwd=2)
                         }
                     dev.set(dev1)
                     if(!(is.na(xy$x[1]) | is.na(xy$y[1]))) {
                         appel.list$xlim <-range(xy$x)
                         appel.list$ylim <-range(xy$y)
                         }
                     else {
                         appel.list$xlim <-NULL
                         appel.list$ylim <-NULL
                         xy$x <- c(NA,NA)
                         xy$y <- c(NA,NA)
                          }
                     eval(as.call(appel.list), sys.frame(0))
                     xlim.old=rbind(xlim.old,xy$x)
                     ylim.old=rbind(ylim.old,xy$y)

                     }
                 else if (i <=0) {
                     dev.set(dev1)
                     eval(appel.plot, sys.frame(0))

                 }
                 }
             else if(finished=="r"){
                 dev.set(dev1)
                 eval(appel.plot, sys.frame(0))
                 xlim.old=rbind(xlim.old,c(NA,NA))
                 ylim.old=rbind(ylim.old,c(NA,NA))

                 }

             else if(finished=="c"){
                 i <- NA
                 xy <- locator(2)
                 k <- k+1
                 dev.set(dev0)
                 eval(appel.plot, sys.frame(0))
                 rect(xy$x[1],xy$y[1],xy$x[2],xy$y[2],border="red",lwd=2)
                 dev.set(dev1)
                 xlim.old=rbind(xlim.old,range(xy$x))
                 ylim.old=rbind(ylim.old,range(xy$y))
                 appel.list$xlim <-range(xy$x)
                 appel.list$ylim <-range(xy$y)
                 eval(as.call(appel.list), sys.frame(0))
             }
             if (finished !="r"){
                 cat("zoom in ", range(xy$x),"(x) and ", range(xy$y),"(y)\n")
                 }

             print(xlim.old)
             finished <- readline("Options: quit[q] refresh[r] continue[c]
    back[b] ")
         }
    }

    At 12:08 22/11/2004, Jean Thioulouse wrote:
    >At 11:12 -0500 22/11/04, Stephane DRAY wrote:
    > >concernant le zoom,
    > >je viens de bricoler une petite fonction "zoom" qui permet de
    > >selectionner une zone rectangulaire d'un graphique, et de zoomer
    >
    >C'est ce que j'avais fait dans le module ADEScatters d'ADE-4, et j'avais
    >meme fait un article a ce sujet dans la revue Computational Statistics,
    >en 1996 :
    >
    >Thioulouse J. (1996) Towards Better Graphics for Multivariate Analysis:
    >the Interactive Factor Map. Computational Statistics, 11, 11-21.
    >
    >http://pbil.univ-lyon1.fr/ADE-4/ref/CS26.pdf
    >
    >Je me souviens que c'etait mon premier article en Latex... J'avais
    >pousse la logique un peu plus loin, en affichant la liste des points
    >presents dans le rectangle de selection (figure 2). On pouvait aussi
    >obtenir la representation graphique d'un element selectionne, avec
    >un diagramme en baton ou avec des cercles et des carres sur le plan
    >factoriel dual (figure 3). Il me semble aussi qu'on pouvait re-zoomer
    >dans une fenetre deja zoomee. Et on pouvait aussi chercher un point
    >dans le graphique : en tapant son numero ou son label, il se mettait
    >a clignoter, je trouvais ca super.
    >
    >C'est a mon avis interessant, et je serais d'accord pour integrer ca
    >dans ade4 (ou dans un package "compagnon").
    >
    >Jean
    >
    >--
    >Jean Thioulouse - Labo. BBE, UMR CNRS 5558, Equipe "Ecologie Statistique"
    >Universite Lyon 1, Batiment G. Mendel, 69622 Villeurbanne Cedex, France
    >Tel: (33) 4 72 43 27 56 Fax: (33) 4 72 43 27 56
    > http://pbil.univ-lyon1.fr/JTHome.html

    Stéphane DRAY
    --------------------------------------------------------------------------------------------------

    Département des Sciences Biologiques
    Université de Montréal, C.P. 6128, succursale centre-ville
    Montréal, Québec H3C 3J7, Canada

    Tel : (514) 343-6111 poste 1233 Fax : (514) 343-2293
    E-mail : stephane.dray@umontreal.ca
    --------------------------------------------------------------------------------------------------

    Web http://www.steph280.freesurf.fr/
    --------------------------------------------------------------------------------------------------



    This archive was generated by hypermail 2b30 : Mon Nov 22 2004 - 21:30:48 MET