[R] Different behavior of mtext
Sébastien
pomchip at free.fr
Tue Sep 4 03:44:11 CEST 2007
Thanks for the information on gridBase, I could solve my problem using
the 'baseViewports' function and by replacing mtext by grid.text (with
coordinates adjustments).
Sebastien
Prof Brian Ripley a écrit :
> On Mon, 3 Sep 2007, Sébastien wrote:
>
>> 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 ?
>
> Before it is used. The problem is that I believe more than one
> package has a unit() function.
>
>> - 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 ?
>
> If you want to mix grid and base graphics, you need package gridBase,
> but really I would not advise a beginner to be using grid directly
> (that is, not via lattice to ggplot*).
>
>
>> 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