[R] R-Graphics: Scaling axis

ripley@stats.ox.ac.uk ripley at stats.ox.ac.uk
Wed Mar 12 08:15:30 CET 2003

Excuse me, but that is not `how you do it'. R has two automated ways. One
is the parameter `asp': see ?plot.window, and the other is the function 
eqscplot() in package MASS.  Neither need manual intervention (unless your 
output device cannot plot square pixels as square).

We need to be a bit careful about the length of axes: if x ranges from 1
to 10, the x axis does not (unless you set xaxs="i").  That's why setting
the plot region (e.g. using par(pty="s") or via the margins) often does
not do what one wants: the plot region may be square but the scales 

On Tue, 11 Mar 2003, Thomas W Blackwell wrote:

> On Wed, 12 Mar 2003, Till Baumgaertel wrote:
> > how can I scale the x- and y-axis of a "plot" to the same scale?
> >
> > My problem: The following command sequence produces the plot in a square.
> > What I want is the x-axis to be 5 times as wide (measured e.g. in pixels)
> > as the y-axis is long (because y ranges from -1 to 1 and x ranges from 0
> > to 10).
> It depends what graphics device you are using.  If the plot is in
> a window on the computer screen, then resizing the window reshapes
> the plot to whatever aspect ratio you want, interactively, so the
> aspect ratio is not an issue.  

It *is* an issue for many statistical plots which rely on interpretation
via Euclidean distance, e.g. MDS plots.  One wants to resize and keep the 
aspect ratio: hence the parameter `asp', and the different resizing 
options on the Windows graphics device.

> For a hardcopy device, such as
> postscript(), the traditional way to control the aspect ratio is
> to fill up the rest of the page with margins.  For a nice, long
> narrow plot ...
> postscript("some.file.name", pointsize=11, horizontal=T)
> par(mar=c(9.5,3.5,3,2), las=1)
> plot(x, y, type="p")
> 	... but after printing one test page, I always take a ruler
> and measure the spacing of the tick marks and calculate how to
> adjust the margin widths better.  Seriously.  I use a ruler.
> It's clunky, but if you care about the graphical scales, that's
> how you do it, and no complaints.  Even the difference between "A4"
> and "letter" paper sizes would throw off any automated calculation.

Not so.  The size of the plot region in inches is available from the 
graphics parameters, specifically par("pin").

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