# [R] [Fwd: Re: Plotting log-axis with the exponential base to

(Ted Harding) Ted.Harding at manchester.ac.uk
Tue May 11 22:51:42 CEST 2010

```Thanks, Peter! The use of curve() is nice. (I hadn't come across
that function before, but then ... ).

Thanks also to Mark Difford for a further suggestion.
Ted.

On 11-May-10 18:27:37, Peter Ehlers wrote:
> Ted,
>
> Regarding the addition of a 'line' to a plot with log-y axis,
> there is a better way: curve() with 'add=TRUE' will respect
> the current plot's log setting:
>
>      plot((1:10), log="y", yaxt="n")
>      axis(side=2, at=c(1,2,5,10))
>      f <- function(x, a=0, b=1) {a + b*x}
>
>   -Peter
>
> On 2010-05-11 4:52, (Ted Harding) wrote:
>> came to a potential solution which is on the lines also outlined
>> by Mark Difford.
>>
>> Where Elisabeth (rather, her tutor) may have become confused may
>> lie in the fact that, with a simple plot(...,log="y"), R will
>> (by default) make its own decision about what numbers (in the raw
>> scale) to put on the Y-axis as annotations. These will be "nice"
>> (or, in R-doc-language, "pretty") numbers favouring simple multiples
>> and submultiples of powers of 10. That may be why the plot gave the
>> impression of being ""a logaritmic axis with the base of 10".
>>
>> The solution, as Elisabeth and I (and later Mark) came to was to
>> suppress the Y-axis in the first instance when using plot(),
>> thus plot(...,log="y",yaxt="n"). Then you add the annotation
>> you want ("custom Y-axis") using the axis() function. The example
>> we came to as paradigm was:
>>
>>    set.seed(54321)
>>    Y<- 70*runif(100)
>>    pwrs2<-2^((floor(log2(min(Y))):ceiling(log2(max(Y)))))
>> ##[1]   0.5   1.0   2.0   4.0   8.0  16.0  32.0  64.0 128.0
>> ##as.character(pwrs2) =
>> ##[1] "0.5" "1"   "2"   "4"   "8"   "16"  "32"  "64"  "128"
>>
>>    plot(Y,log="y",yaxt="n",ylim=c(min(pwrs2),max(pwrs2)))
>>
>>    axis(side=2,at=pwrs2,labels=as.character(pwrs2),las=1)
>>
>> It is looking as though this will be the basis for a successful
>> solution in Elisabeth's real application.
>>
>> However, there is another little "trap" lurking in there, best
>> illustrated by Mark's dataset:
>>
>>    plot((1:10), log="y", yaxt="n")
>>    axis(side=2, at=c(1,2,5,10))
>>
>> Here the data are X=(1:10), Y=(1:10), i.e. a straight line Y=X
>> in the raw (X,Y) plane. No purer candidate for a regression line
>> could be imagined. So let us try to add the regression to the plot.
>> Since it joins (0,0) to (10,10), let's try (after the above plot
>> commands):
>>
>>    lines(c(1,10),c(1,10))
>>
>> Well, this has taken the points (1,1) and (10,10) on the plot,
>> with the Y-axis duly scaled logarithmically, and joined them.
>> But what it has joined them with is a straight line on the
>> logarithmic plot itself. I.e. it has not computed intermediate
>> points on a logarithmic scale. Therefore, as a logarithmic
>> representation of the straight-line regression Y=X, it is false!
>>
>> One solution is to construct it explicitly over the intermediate
>> points:
>>
>>    lines(0.1*(10:100),0.1*(10:100))
>>
>> so that now each intermediate point has its Y-coordinate log
>> transformed, and the straight-line segments on the graph will
>> now approximate to the logarithmic curve that one wanted in the
>> first place.
>>
>> I don't know of another way to do this: for instance, log="y" will
>> not work with lines(), since '"log" is not a graphical parameter'.
>>
>> Ted.
>>
>> --------------------------------------------------------------------
>> E-Mail: (Ted Harding)<Ted.Harding at manchester.ac.uk>
>> Fax-to-email: +44 (0)870 094 0861
>> Date: 11-May-10                                       Time: 11:52:30
>> ------------------------------ XFMail ------------------------------
>>
>> ______________________________________________
>> R-help at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>>
>>
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help