[R] mtext text size (cex) doesn't match plot

George Locke george.locke.physics at gmail.com
Thu May 12 16:16:35 CEST 2011


thanks for reading the manual for me :X

2011/5/12 Prof Brian Ripley <ripley at stats.ox.ac.uk>:
> On Wed, 11 May 2011, George Locke wrote:
>
>> Hi,
>>
>> I am using mtext instead of the ylab argument in some plots because i
>> want to move it away from the numbers in the axis.  However, the text
>> in the X axis,
>>
>> for example:
>>   par(mar=c(5, 5.5, 4, 2));
>>   plot(data, main="plot name", xlab= 'X axis', ylab="",
>>        font=2, cex.lab=1.5, font.lab=2, cex.main=1.8);
>>   mtext('Y axis', side=2, cex=1.5, line=4, font=2);
>>
>> This works fine, but if I then set
>>
>>   par(mfrow=c(3,2));
>>
>> the text produced by mtext becomes much larger than the text "X axis"
>> produced by plot, despite their having identical cex specifications.
>> In this case, the words "Y axis" become much larger than "plot name".
>> Note that without par(mfrow) the size of "X axis" and "Y axis" match
>> iff their cex(.lab) arguments match.
>>
>> How can I make mtext produce text that exactly matches the xlab?  In
>> my limited experience fiddling around with this problem, the size of
>> the mtext does not depend on par(mfrow), whereas the size of the xlab
>> does, so if there were a formula that relates the actual size of text,
>
> Please do read the help!  ?mtext says
>
>     cex: character expansion factor.  ‘NULL’ and ‘NA’ are equivalent
>          to ‘1.0’.  This is an absolute measure, not scaled by
>          ‘par("cex")’ or by setting ‘par("mfrow")’ or ‘par("mfcol")’.
>
> so no 'limited experience fiddling around with this problem' was needed.
>  And see ?par:
>
>     ‘cex’ A numerical value giving the amount by which plotting text
>          and symbols should be magnified relative to the default.
>          This starts as ‘1’ when a device is opened, and is reset when
>          the layout is changed, e.g. by setting ‘mfrow’.
>
>     ‘mfcol, mfrow’ A vector of the form ‘c(nr, nc)’.  Subsequent
>          figures will be drawn in an ‘nr’-by-‘nc’ array on the device
>          by _columns_ (‘mfcol’), or _rows_ (‘mfrow’), respectively.
>
>          In a layout with exactly two rows and columns the base value
>          of ‘"cex"’ is reduced by a factor of 0.83: if there are three
>          or more of either rows or columns, the reduction factor is
>          0.66.
>
>> cex argument, and par(mfrow), then I could use that to attenuate the
>> cex argument of mtext.  Any solution will do, so long as it maintains
>> the relative sizes of the plot and the three text fields (main, x axis
>> label, y axis label).
>
> library(fortunes); fortune(14) applies -- see the posting guide.
>
> --
> 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