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

From: Prof Brian Ripley <>
Date: Thu, 12 May 2011 06:29:03 +0100 (BST)

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

> 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,        
Professor of Applied Statistics,
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

______________________________________________ mailing list PLEASE do read the posting guide and provide commented, minimal, self-contained, reproducible code.

Received on Thu 12 May 2011 - 05:33:34 GMT

This quarter's messages: by month, or sorted: [ by date ] [ by thread ] [ by subject ] [ by author ]

All messages

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Thu 12 May 2011 - 14:30:06 GMT.

Mailing list information is available at Please read the posting guide before posting to the list.

list of date sections of archive