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} > curve(f, add = TRUE) > > -Peter > > On 2010-05-11 4:52, (Ted Harding) wrote: >> Elisabeth and I have been corresponding off-list about this, and >> 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.hard...@manchester.ac.uk> >> Fax-to-email: +44 (0)870 094 0861 >> Date: 11-May-10 Time: 11:52:30 >> ------------------------------ XFMail ------------------------------ >> >> ______________________________________________ >> R-help@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. >> >> > > ______________________________________________ > R-help@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. -------------------------------------------------------------------- E-Mail: (Ted Harding) <ted.hard...@manchester.ac.uk> Fax-to-email: +44 (0)870 094 0861 Date: 11-May-10 Time: 21:51:39 ------------------------------ XFMail ------------------------------ ______________________________________________ R-help@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.