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,                  [EMAIL PROTECTED]
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
______________________________________________
R-help@stat.math.ethz.ch 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