[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
David
> 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