[R] Different behavior of mtext

Sébastien pomchip at free.fr
Mon Sep 3 16:05:40 CEST 2007


Ok, the problem is clear now. I did not get that 'user-coordinates' was 
refering to par("usr"), when I read the help of mtext. If I may ask you 
some additional questions:
- you mentioned a missing unit() call ; at which point should it be done 
in my code examples ?
- could you give me some advices or helpful links about how to set up a 
grid viewport ? 
- and finally, probably a stupid question: is a gridview automatically 
set up when a plotting function is called ?

Sebastien

PS: To answer to your final question, my goal is to center a block of 
legend text on the device but to align the text to the left of this block.

Prof Brian Ripley a écrit :
> On Sun, 2 Sep 2007, Sébastien wrote:
>
>> Dear R Users,
>>
>> I am quite surprised to see that mtext gives different results when it
>> is used with 'pairs' and with "plot'. In the two following codes, it
>> seems that the 'at' argument in mtext doesn't consider the same unit 
>> system.
>
> It is stated to be in 'user coordinates'.  Your code does not work 
> because unit() is missing.  If you mean the one from package grid, 
> "npc" is not user coordinates (and refers to a grid viewport which you 
> have not set up and coincidentally is the same as the initial user 
> coordinate system to which pairs() has reverted).
>
> Try par("usr") after your pairs() and plot() calls to see the difference.
> Plotting a 2x2 array of plots _is_ different from plotting one, so 
> this should be as expected.
>
> Since centring is the default for 'adj', it is unclear what you are 
> trying to achieve here.
>
>> I would appreciate your comments on this issue.
>>
>> Sebastien
>>
>> ##### Pairs
>>
>> mydata<-data.frame(x=1:10,y=1:10)
>>
>> par(cex.main=1, cex.axis=1, cex.lab=1, lwd=1,
>>    mar=c(5 + 5,4,4,2)+0.1)
>>
>> pairs(mydata,oma=c(5 + 5,4,4,2))
>>
>> mylegend<-c("mylegend A","mylegend B","mylegend C","mylegend test")
>> mylegend.width = strwidth(mylegend[which.max(nchar(mylegend))], 
>> "figure")
>>
>> for (i in 1:4) {
>> mtext(text=mylegend[i],
>>        side = 1,
>>        line = 3+i,
>>        at = unit((1-mylegend.width)/2,"npc"),            # centers the
>> legend at the bottom
>>        adj=0,
>>        padj=0)}
>>
>> ##### plot
>>
>> mydata<-data.frame(x=1:10,y=1:10)
>>
>> par(cex.main=1, cex.axis=1, cex.lab=1, lwd=1,
>>    mar=c(5 + 5,4,4,2)+0.1)
>>
>> plot(mydata,oma=c(5 + 5,4,4,2))
>>
>> mylegend<-c("mylegend A","mylegend B","mylegend C","mylegend test")
>> mylegend.width = strwidth(mylegend[which.max(nchar(mylegend))], 
>> "figure")
>>
>> for (i in 1:4) {
>> mtext(text=mylegend[i],
>>        side = 1,
>>        line = 3+i,
>>        at = unit((1-mylegend.width)/2,"npc"),            # should
>> center the legend at the bottom but doesn't do it !
>>        adj=0,
>>        padj=0)}
>



More information about the R-help mailing list