Re: [R] asp and ylim

From: David Epstein <>
Date: Mon, 21 Jul 2008 10:09:51 +0100

Since posting the message immediately below, I took Brian's reference to "Introduction to R" more seriously, and read through the section on graphics. There I found par(fig=c(xleft,xright,ybottom,ytop)). This seems to be "setting the device region" which Brian pointed out is a fundamental part of the process, but I haven't tried it yet. I expect this is what I need in order to make plot() do what I want.

Thanks again, especially to Brian

> Maybe what I am missing is how to set the "device region" mentioned
> in Brian's email. I have tried various searches, but I haven't had
> any luck in finding a reference to "device region". However, I'm
> not sure that changing the device region will help if one stays
> with plot(), because the default seems to be that the physical plot
> region is approximately square, and I haven't found a way to
> control the size of the physical plot region. The help files for
> eqscplot() and xyplot() indicate that they are meant for scatter
> plots. But lots of plots are not scatter plots. I was only using a
> scatter plot because Rolf's code did so, and he thought I could do
> what I wanted inside plot(), which I can't at the moment.
> Perhaps the best solution is to live with plot() as it is. If I
> need the picture for a paper, I will export data to Matlab or
> Mathematica or Illustrator, where I can get the control I want.
> Thanks for all your help.
> David
> On 20 Jul, 2008, at 23:14, Prof Brian Ripley wrote:
>> Take a look at eqscplot() in package MASS for a different approach.
>> You last para forgets that once you have set the device region and
>> the margins the physical plot region and hence its aspect ratio is
>> determined -- see the figures in 'An Introduction to R'.
>> On Sun, 20 Jul 2008, David Epstein wrote:
>>> #See David Williams' book "Weighing the odds", p286
>>> y <- c(1.21, 0.51, 0.14, 1.62, -0.8,
>>> 0.72, -1.71, 0.84, 0.02, -0.12)
>>> ybar <- mean(y)
>>> ylength <- length(y)
>>> ybarv <- rep(ybar, ylength)
>>> x <- 1:ylength
>>> plot(x,y,asp=1,xlab="position",ylab="ybar",type="n",ylim=c(-1,1))
>>> segments(x[1], ybar, x[ylength], ybar)
>>> segments(x,ybarv,x,y)
>>> points(x, ybarv, pch=21, bg="white")
>>> points(x,y,pch=19,col="black")
>>> With asp=1, the value of ylim seems to be totally ignored, as in
>>> the above code. With asp not set, R plays close attention to the
>>> value of ylim. This is not intuitive behaviour, or is it?
>>> How can I set the aspect ratio, and simultaneously set the plot
>>> region? The aspect ratio is one number and the plot region is
>>> given by four numbers (xleft, xright, yleft, yright). Logically,
>>> these 5 numbers are independent of each other and arbitrary,
>>> provided xleft<xright and yleft<yright. This should give a one-to-
>>> one bijection between 5-tuples and plots, determined up to a
>>> change of scale that is uniform in the x- and y-dirctions. My
>>> code above shows the (to me) obvious attempt, which fails.
>>> Thanks
>>> David
>>> ______________________________________________
>>> mailing list
>>> PLEASE do read the posting guide
>>> guide.html
>>> and provide commented, minimal, self-contained, reproducible code.
>> --
>> 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 Mon 21 Jul 2008 - 09:17:01 GMT

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 Mon 21 Jul 2008 - 10:32:03 GMT.

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

list of date sections of archive