Jim Lemon replied directly to me with a helpful function that needs to be adapted. Yet it almost does exactly what I want. I'm posting it so that it appears in the thread as it could be useful to others.
Thank you Jim Tito Le jeu 14/08/2003 à 15:28, Jim Lemon a écrit : > If I understand this, it is fairly easy to write a function to do this > plot. Here is a very basic example. You will probably want to customize > this to suit your needs, and the plotting of text labels is _very_ basic. > Hope it helps. > > Jim > > # this utility just rescales data to a new range > rescale<-function(x,newrange) { > if(nargs() > 1 && is.numeric(x) && is.numeric(newrange)) { > # if newrange has max first, reverse it > if(newrange[1] > newrange[2]) { > newmin<-newrange[2] > newrange[2]<-newrange[1] > newrange[1]<-newmin > } > xrange<-range(x) > if(xrange[1] == xrange[2]) stop("can't rescale a constant vector!") > mfac<-(newrange[2]-newrange[1])/(xrange[2]-xrange[1]) > invisible(newrange[1]+(x-xrange[1])*mfac) > } > else { > cat("Usage: rescale(x,newrange)\n") > cat("\twhere x is a numeric object and newrange is the min and max of > the new range\n") > } > } > > star.plot<-function(lengths,rad.pos,labels) { > maxlength<-max(lengths)+0.1*!missing(labels) > plot(c(-maxlength,maxlength),c(-maxlength,maxlength),type="n",axes=FALSE, > xlab="",ylab="") > npos<-length(rad.pos) > # add one space to prevent overlapping > newrange<-c(0,2*pi*npos/(npos+1)) > # rescale to a range of 0 to almost 2pi > rad.pos<-rescale(rad.pos,newrange) > # get the vector of x positions > xpos<-cos(rad.pos)*lengths > # get the vector of y positions > ypos<-sin(rad.pos)*lengths > segments(0,0,xpos,ypos) > if(!missing(labels)) { > xpos<-xpos*1.1 > ypos<-ypos*1.1 > text(xpos,ypos,labels) > } > } -- L. Tito de Morais UR RAP IRD de Dakar BP 1386 Dakar Sénégal Tél.: + 221 849 33 31 Fax: +221 832 16 75 Courriel: [EMAIL PROTECTED] ______________________________________________ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help