Re: encadrement des labels

From: Clément Calenge (calenge@biomserv.univ-lyon1.fr)
Date: Tue Oct 28 2003 - 11:00:52 MET


Bonjour,

>Sur ADE dans R, je souhaite utiliser s.label et s.arrow en indiquant les
>labels des points mais SANS avoir le joli petit cadre autour du label.

On peut utiliser la fonction text
doit xy la data frame contenant les coordonnées des points à représenter
par s.label:

xy<-cbind.data.frame(x=runif(25), y=runif(25))

opar<-par(mar=c(0,0,0,0))
s.label(xy, cpo=0, clab=0)
text(xy, labels=row.names(xy))
par(opar)

Pour s.arrow, il faut modifier la fonction scatterutil.eti.circ appelée par
la fonction
(pour que les labels ne tombent pas sur les flèches):

scatterutil.eti.circ<-function (x, y, label, clabel, origin = c(0, 0))
  {
      if (is.null(label))
          return(invisible())
      if (any(is.na(label)))
          return(invisible())
      if (any(label == ""))
          return(invisible())
      xref <- x - origin[1]
      yref <- y - origin[2]
      for (i in 1:(length(x))) {
          cha <- as.character(label[i])
          cha <- paste(" ", cha, " ", sep = "")
          cex0 <- par("cex") * clabel
          xh <- strwidth(cha, cex = cex0)
          yh <- strheight(cha, cex = cex0) * 5/6
          if ((xref[i] > yref[i]) & (xref[i] > -yref[i])) {
              x1 <- x[i] + xh/2
              y1 <- y[i]
          }
          else if ((xref[i] > yref[i]) & (xref[i] <= (-yref[i]))) {
              x1 <- x[i]
              y1 <- y[i] - yh
          }
          else if ((xref[i] <= yref[i]) & (xref[i] <= (-yref[i]))) {
              x1 <- x[i] - xh/2
              y1 <- y[i]
          }
          else if ((xref[i] <= yref[i]) & (xref[i] > (-yref[i]))) {
              x1 <- x[i]
              y1 <- y[i] + yh
          }
          text(x1, y1, cha, cex = cex0)
      }
  }

s.arrow(xy)

Cordialement,

Clément.

======================================

Clément CALENGE
Doctorant / PhD.
UMR CNRS 5558 - Equipe "Ecologie Statistique"
Laboratoire de Biométrie et Biologie Evolutive
Université Claude Bernard Lyon 1
43, Boulevard du 11 novembre 1918
69622 Villeurbanne Cedex
FRANCE
tel. (+33) 04.72.43.27.57
fax. (+33) 04.72.43.13.88



This archive was generated by hypermail 2b30 : Tue Sep 07 2004 - 13:45:25 MEST