From: Marc Schwartz <marc_schwartz_at_comcast.net>

Date: Mon, 21 Jul 2008 07:25:32 -0500

R-help_at_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. Received on Mon 21 Jul 2008 - 12:28:44 GMT

Date: Mon, 21 Jul 2008 07:25:32 -0500

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_at_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. Received on Mon 21 Jul 2008 - 12:28:44 GMT

Archive maintained by Robert King, hosted by
the discipline of
statistics at the
University of Newcastle,
Australia.

Archive generated by hypermail 2.2.0, at Mon 21 Jul 2008 - 13:32:01 GMT.

*
Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help.
Please read the posting
guide before posting to the list.
*