[R] Different behavior of mtext
Prof Brian Ripley
ripley at stats.ox.ac.uk
Mon Sep 3 16:49:55 CEST 2007
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)}
>>
>
--
Brian D. Ripley, ripley at stats.ox.ac.uk
Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/
University of Oxford, Tel: +44 1865 272861 (self)
1 South Parks Road, +44 1865 272866 (PA)
Oxford OX1 3TG, UK Fax: +44 1865 272595
More information about the R-help
mailing list