on 07/21/2008 07:13 AM (Ted Harding) wrote:
Hi Folks,
I've been digging for the solution to this for several
hours now. If there is a solution, it must be one of the
worst "needle-in-a-haystack" examples in R documentation!

Essentially, I want to make an x-y plot in which the
X-axis really is the X-axis (i.e. its vertical position
is at y=0), and the Y-axis really is the Y-axis (i.e.
its horizontal position is at x=0). Discussion, with
toy examples, below.

I have sort-of solved this (as stated) for one special
case, after a depth-4 search through

  ?plot --> ?plot.default --> ?par --> ?axis

which finally led me to the parameter "pos" to axis():

  ?axis
  pos: the coordinate at which the axis line is to be drawn:
  if not 'NA' this overrides the values of both 'line' and 'mgp[3]'.

Hence, instead of

  plot(c(0.5,2.5),c(0.5,2.5),xlim=c(0,3),ylim=c(0,3),
       frame.plot=FALSE)

(where the axes do not meet at the origin (0,0)), I can do

  plot(c(0.5,2.5),c(0.5,2.5),xlim=c(0,3),ylim=c(0,3),
       frame.plot=FALSE,pos=0)

which is *exactly* what I want in this case.

Ted, try this:

plot(c(0.5,2.5), c(0.5,2.5), xlim=c(0,3), ylim=c(0,3),
     xaxs = "i", yaxs = "i")

or perhaps this:

plot(c(0.5,2.5), c(0.5,2.5), xlim=c(0,3), ylim=c(0,3),
     xaxs = "i", yaxs = "i", axes = FALSE, frame.plot = FALSE)

axis(1)
axis(2)


But now I want to do the same, where instead of plotting the
two points (0.5,0.5), (2.5,2.5) I want to plot (0.5,2.5), (2.5,4.5).

Provided I keep the xlim and ylim to both have lower value 0,
a similar solution again works fine:

  plot(c(0.5,2.5),c(2.5,4.5),xlim=c(0,3),ylim=c(0,5),
       frame.plot=FALSE,pos=0)

Same thing here:

plot(c(0.5,2.5), c(2.5,4.5), xlim=c(0,3), ylim=c(0,5),
     xaxs = "i", yaxs = "i")


But, in this case, what I *really* want is to limit the Y range
to the "relevant" bit: ylim=c(2,5) -- I don't want to have a lot
of empty space below the points. So I want a Y-axis running from
y=2 to y=5, and X-axis as before from x=0 to x=3, and I want these
two axes to meet at (x=0,y=2). But how?

plot(c(0.5,2.5), c(2.5,4.5), xlim=c(0,3), ylim=c(2,5),
     xaxs = "i", yaxs = "i")

By analogy to the above, I need to set a "pos=0" for the X-axis,
and a "pos=2" for the y-axis. And I have not been able to discover
how to do this.

With thanks,
Ted.

See ?par and take note of 'xaxs' and 'yaxs', where it is noted that the default 'r' extends the axes by +/- 4% of the data range. Using 'i' gives you axes with the exact range of the data and/or the 'xlim' and 'ylim' settings.

HTH,

Marc Schwartz

______________________________________________
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.

Reply via email to