[R] Reverse plot axes with xlim=rev(range(x)) fails with asp=1

Gregory Jefferis gsxej2 at cam.ac.uk
Mon Mar 7 09:44:08 CET 2005


Dear Roger,

Thank you for your suggestion and explanation, that was v. helpful.  I also
found the axTicks() command to help generate the normal sequences for tick
marks and labels used in your 'kludge' eg:

>plot(y=-y,x=x, ylim=range(-y), asp=1, axes=FALSE)
>box()
>axis(1) 
axis(2, at=axTicks(2), label=axTicks(2)*-1)

Many thanks,

Greg.


On 5/3/05 7:19 pm, "Roger Bivand" <Roger.Bivand at nhh.no> wrote:

> On Sat, 5 Mar 2005, Gregory Jefferis wrote:
> 
>> Dear R users,
>> 
>> I would like to reverse the axes on some xy plots (for example to set the
>> origin at the top left rather than the bottom left).  I had planned to use
>> something of the following form:
>> 
>> plot(y=y<-c(20,4,5,6),x=x<-c(10,20,30,40),ylim=rev(range(y)))
>> 
>> ie reversing ylim to reverse the y axis.  This works fine however I also
>> want to use the parameter asp=1 to ensure that equal distances in the x or y
>> direction are plotted as such on the screen.  However the simple example I
>> showed above now fails:
>> 
>>> plot(y=y<-c(20,4,5,6),x=x<-c(10,20,30,40),ylim=rev(range(y)),asp=1)
>> 
>> The actual ylim used is considerably less than it should be, so no points
>> appear on the plot.
>> 
>> Can anyone suggest a simple remedy?
> 
>> plot(y=-y,x=x, ylim=range(-y), asp=1, axes=FALSE)
>> box()
>> axis(1)
>> axis(2, at=seq(-20,-5,5), label=seq(20,5,-5))
> 
> is a simple kludge, the explanation is touched on in a comment in
> src/main/plot.c, after line 564:
> 
>  * The use of asp can have weird effects when axis is an
>  * interpreted function.  It has to be internal so that the
>  * full computation is captured in the display list.
> 
> and may be related to the sign of ydelta being dropped in line 652 (for
> the y axis) and Gscale() being possibly called in line 666 with incorrect
> assumptions about whether to add or subtract the correction factor -
> untried!
> 
>> 
>> Many thanks,
>> 
>> Greg Jefferis.
>> 
>> PS I would guess that the origin of this behaviour is that plot.window
>> expects xlim (and ylim) to be in the order xmin,xmax (or ymin,ymax) when it
>> sets about redefining xlim and ylim if asp!=NA.  If that suggestion is
>> correct, I'm not quite sure why the restriction is necessary.
>> 
>> 

-- 
Gregory Jefferis, PhD                               and:
Research Fellow
Department of Zoology                               St John's College
Downing Street                                      Cambridge
Cambridge, CB2 3EJ                                  CB2 1TP

Tel: +44 (0)1223 336683                             +44 (0)1223 339899
Fax: +44 (0)1223 336676                             +44 (0)1223 337720

gsxej2 at cam.ac.uk




More information about the R-help mailing list