[R] asp and ylim

David Epstein David.Epstein at warwick.ac.uk
Mon Jul 21 11:09:51 CEST 2008

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
>>> ______________________________________________
>>> R-help at r-project.org 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.
>> -- 
>> 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