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: [email protected]
>> 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]
>>
>> ______________________________________________
>> [email protected] 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]
______________________________________________
[email protected] 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.