Re: [Rd] Reversing axis in a log plot (PR#7894)

2005-05-30 Thread maechler
 UweL == Uwe Ligges [EMAIL PROTECTED]
 on Fri, 27 May 2005 11:42:54 +0200 (CEST) writes:

UweL Please find attached my proposal for a bugfix. The
UweL experts might to better, though.

UweL Uwe Ligges

Thank you, Uwe!

Yes, your fix works, and yes, it can be improved (e.g., no need for
the 'atr'; no 'reversed' when in the linear case, ..)

Also, there won't be any warning either anymore,
plot(1:3, exp(1:3), xlim = c(30,1))
also gives no warning.

You'll find the fixed plot.c in tomorrow's snapshot.


BTW:  The whole thing {axis reversion} doesn't work in S-plus
  {doing a non-sensical plot, with tons of warnings}

__ mailing list

Re: [Rd] Reversing axis in a log plot (PR#7894)

2005-05-27 Thread ligges
Yes, this one is a bug in CreateAtVector, plot.c.
It already has the lines:

 /* Debugging: When does the following happen... ? */
 if (umin  umax)
 warning(CreateAtVector \log\(from axis()): 
 usr[0] = %g  %g = usr[1] !, umin, umax);

And now we know that it happens if (and only if?) the logarithmic 
scale is not very small (i.e. axp[2]  0, this is equal to R's 
par(yaxp)[3] in your example) and the axis are reversed (umin  umax).

I'll try to provide a fix which should be possible by reversing 
arguments axp and usr in this case and returning a reversed at ...

Uwe Ligges


 Full_Name: Christian Marquardt
 Version: 2.1.0
 OS: Linux (Redhat 9)
 Submission from: (NULL) (
 Following the advice of a reader of R-help, I would now like to submit this 
 as a
 bug report:
 Say we have
   x = seq(1,3, by = 0.01)
   y = exp(x)
 Plotting and reversing linear axis is fine
plot(x,y, ylim = c(30,1))
 as is a usual log-plot:
   plot(x,y, log = y, ylim = c(1,30))
   plot(x,y, log = y, ylim = c(30,1))
 fails with
   Error in axis(2, ...) : log - axis(), 'at' creation, _SMALL_ range:
 invalid {xy}axp or par;
  axp[0]= 10, usr[0:1]=(34.3721,0.872801)
   In addition: Warning message:
   CreateAtVector log(from axis()): usr[0] = 34.3721  0.872801 = usr[1] !
 According to Petr Pikal petr.pikal -at-, replacing the ylim
 argument by ylim = c(30,1.2) helps in the above example; but in my real world
 applications, it's actually difficult to find a working value for ylim.
 I hope this is useful,
 __ mailing list

__ mailing list