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.

Reply via email to