From: Paul Murrell <p.murrell_at_auckland.ac.nz>

Date: Tue 03 May 2005 - 12:31:28 EST

lines(c(20,20),c(10^lower, 1))

points(20,10, pch=18)

Date: Tue 03 May 2005 - 12:31:28 EST

Hi

Steven J. Murdoch wrote:

> I would like to draw a vertical line from a given point, in user

*> coordinates, to x inches before from another point, also in user
**> coordinates. This is easy enough to do for linear scales, using code
**> based on xinch/yinch, but I do not know how to do this for logarithmic
**> scales.
**>
**> This code shows an example of what I mean[1]:
**>
**> split.screen(c(2,1))
**> screen(1)
**> # Linear scale, works fine
**> plot(1:100, cex=0.5, pch=19)
**> plotheight <- diff(par("usr")[3:4])
**> igap = 0.5 # intended gap, in inches
**> gap <- igap/par("pin")[2]*plotheight # gap in user units
**> lines(c(20,20),c(100,60+gap))
**> lines(c(20,20),c(60-gap,1))
**> points(20,60, pch=18)
**>
**> screen(2)
**> # Logarithmic scale, point no longer centered
**> plot(1:100, cex=0.5, pch=19, log="y")
**> plotheight <- diff(par("usr")[3:4])
**> igap = 10
**> gap <- igap/par("pin")[2]*plotheight
**> lines(c(20,20),c(100,10+gap))
**> lines(c(20,20),c(10-gap,1))
**> points(20,10, pch=18)
**> close.screen(all=TRUE)
**>
**> The top graph is as I want. The diamond is centered in the gap, and
**> the gap is 1 inch high (2*igap).
**>
**> In bottom graph, using a log scale, the diamond is no longer centered
**> in the gap and there is a non-linear relationship between the gap
**> height in inches and igap.
**>
**> I understand why this is happening, and this is why the xinch and
**> yinch functions raise a warning, but is there a way to handle it? For
**> example, is there a function which will return the user coordinate of
**> a point, x inches above a given point p (in user coordinates), for a
**> logarithmic y axis?
*

No function, but does this do what you want? The basic idea is to work in logged values (which is what par("usr") is in) then convert back to plot (broken into many steps to hopefully aid clarity) ...

plot(1:100, cex=0.5, pch=19, log="y")

plotheight <- diff(par("usr")[3:4])

igap <- 0.5 # intended gap, in inches pigap <- igap/par("pin")[2] # intended gap as propn of plot height dy <- 10 # y location for diamond ldy <- log10(dy) # logged y location for diamondupper <- ldy + pigap/2*plotheight # logged y location for top of gap lower <- ldy - pigap/2*plotheight # logged y location for bottom of gap lines(c(20,20),c(100, 10^upper))

lines(c(20,20),c(10^lower, 1))

points(20,10, pch=18)

Paul

> [1] I actually want to use this in a larger script, where I leave a

*> gap in the axis where the median in. This needs to be small but
**> legible to the eye, so that is why I am defining it in inches.
**> The source code is at:
**> http://www.cl.cam.ac.uk/users/sjm217/projects/graphics/fancyaxis.R
**>
*

-- Dr Paul Murrell Department of Statistics The University of Auckland Private Bag 92019 Auckland New Zealand 64 9 3737599 x85392 paul@stat.auckland.ac.nz http://www.stat.auckland.ac.nz/~paul/ ______________________________________________ R-help@stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.htmlReceived on Tue May 03 12:37:09 2005

*
This archive was generated by hypermail 2.1.8
: Fri 03 Mar 2006 - 03:31:32 EST
*