[R] asp and ylim

David Epstein David.Epstein at warwick.ac.uk
Mon Jul 21 10:42:35 CEST 2008

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.

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