Dear Greg, So it appears I was wrongly (not surprising) thinking "toplef" was a xy.coords behaviour, when it is only a legend quirk. I didn't know about the grconvert(X|Y) functions, and they do a very nice job indeed!
So I ended up with the following: panel.annot <- function(x, y, ...) { points(x, y, ...) c <- cor.test(x, y) text(grconvertX(0.01, "npc"), grconvertY(.99, "npc"), labels=substitute(rho == r, list(r=sprintf("%.2f", c$estimate))), adj=c(0, 1)) } And it works perfectly! Thanks a lot, Xavier Greg Snow wrote : > The xy.coords function is a powerful function used by a lot of the plotting > functions because it allows the user to enter x and y coordinates as 2 > vectors, a 2 column matrix, or a list with x and y components (and possibly > others), but it does not do 'topleft' and the like. The legend function (and > some others) have special handling to recognize and implement strings like > 'topleft'. One of the easier ways to plot something in the top left (or > other relative positions) is to include the following line in your panel > function: > > usr <- par('usr') > > Now the vector user will have 4 values: xleft, xright, ybottom, ytop. To > place text in the topleft corner, just do: > > text(usr[1], usr[4], 'your text here', adj=c(0,1) ) > > or something like: > > text( usr[1] + (usr[2]-usr[1])/10, usr[4] - (usr[4]-usr[3])/10, 'your text' ) > > to center the text 10% of the way in from the topleft corner. The other > corners and sides should be fairly easy to work out from the above. > > Other options include using the grconvertX and grconvertY functions. > > Hope this helps, > > -- > Gregory (Greg) L. Snow Ph.D. > Statistical Data Center > Intermountain Healthcare > [EMAIL PROTECTED] > 801.408.8111 > > >> -----Original Message----- >> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] >> project.org] On Behalf Of Xavier Robin >> Sent: Thursday, October 23, 2008 5:58 AM >> To: r-help@r-project.org >> Subject: [R] xy.coords in text >> >> Hello, >> >> I want to add text annotation about correlation on "pairs" plots. I >> found that I could pass a function to the "panel" argument of pairs : >> >> panel.annot <- function(x, y, ...) { >> points(x, y, ...) >> c <- cor.test(x, y) >> legend("topleft", legend=substitute(rho == r, >> list(r=sprintf("%.2f", >> c$estimate))), bty="n") >> } >> >> And then : >> >> dat <- data.frame(a=rnorm(100), b=runif(100), c=runif(100)) # just >> random data >> pairs(dat, panel=panel.annot) >> >> It works fine. But what I plot is not really a legend, so I'd prefer to >> use the text function instead of legend : >> >> panel.annot <- function(x, y, ...) { >> points(x, y, ...) >> c <- cor.test(x, y) >> text("topleft", labels=substitute(rho == r, list(r=sprintf("%.2f", >> c$estimate)))) >> } >> >> But the text is not plotted and I get warnings instead : >> >> 1: In xy.coords(x, y, recycle = TRUE) : >> NAs introduced by coercion >> >> If I run xy.coords("topleft") directly, I can see that the y coord (and >> ylab as well) is not defined, but I don't understand why it would work >> with legend and not with text... Especially since ?text doc states that >> >>> 'y' may be missing since 'xy.coords(x,y)' is used for construction of >> the coordinates. >> >> Can someone explain me this difference? And optionally how to plot text >> in the "topleft" part of the plot without using legend? >> >> Thanks, >> Xavier >> >> -- >> Xavier Robin >> >> Biomedical Proteomics Research Group (BPRG) >> Department of Structural Biology and Bioinformatics (DBSB) >> Geneva University Medical Center (CMU) >> 1, rue Michel Servet - CH-1211 Genève 4 - Switzerland >> Tel: (+41 22) 379 53 21 >> Fax: (+41 22) 379 59 84 >> [EMAIL PROTECTED] >> >> ______________________________________________ >> R-help@r-project.org mailing list >> https://stat.ethz.ch/mailman/listinfo/r-help >> PLEASE do read the posting guide http://www.R-project.org/posting- >> guide.html >> and provide commented, minimal, self-contained, reproducible code. > -- Xavier Robin Biomedical Proteomics Research Group (BPRG) Department of Structural Biology and Bioinformatics (DBSB) Geneva University Medical Center (CMU) 1, rue Michel Servet - CH-1211 Genève 4 - Switzerland Tel: (+41 22) 379 53 21 Fax: (+41 22) 379 59 84 [EMAIL PROTECTED] ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.