Hello, everybody. A student asked me a howto question I can't answer. We want the length of the drawn axes to fill the full width and height of the plot, like so: | | * | * | * ---|----------------- However, when we use plot with axes=F and then use the axis commands to add the axes, they do not cross over each other. We get | * | * * ---------- The axes are not wide enough to cover the entire range of the data. We do not want to add a box() command, which is a usual answer for this, because we don't want to draw on top or the side. Here's my test case: x <- rnorm(100) z <- gl(2,50) y <- rnorm(100, mean= 1.8*as.numeric(z)) plot(x,y,type="n", axes=F) points(x,y, pch="$",cex=0.7, col=z) axis(1, col="green", col.axis="green") axis(2, col="red", col.axis="red") Can I cause the 2 axes to "cross" as desired? The axis help says the axis is clipped at the plot region, but it seems to get clipped even more narrowly thanthat. I've been searching in r-help quite a bit and am a little surprised how difficult this is.... -- Paul E. Johnson Professor, Political Science 1541 Lilac Lane, Room 504 University of Kansas
Try defining the argument 'pos' in the axis command-line, like: x <- rnorm(100) z <- gl(2,50) y <- rnorm(100, mean= 1.8*as.numeric(z)) plot(x,y,type="n", axes=F) points(x,y, pch="$",cex=0.7, col=z) axis(1, col="green", col.axis="green", pos=0) axis(2, col="red", col.axis="red", pos=-2) ________________________________________ Daniel Moreira, MD Research Associate Duke University Medical Center DUMC 2626, MSRB-I Room 455 571 Research Drive Durham, North Carolina 27710 Telephone: (919) 681-7132 Fax: (919) 668-7093 E-mail: daniel.moreira@duke.edu Paul Johnson <pauljohn32@gmail.com> Sent by: r-help-bounces@r-project.org 02/13/2009 02:25 PM To R-help <r-help@stat.math.ethz.ch> cc Subject [R] I want axes that cross Hello, everybody. A student asked me a howto question I can't answer. We want the length of the drawn axes to fill the full width and height of the plot, like so: | | * | * | * ---|----------------- However, when we use plot with axes=F and then use the axis commands to add the axes, they do not cross over each other. We get | * | * * ---------- The axes are not wide enough to cover the entire range of the data. We do not want to add a box() command, which is a usual answer for this, because we don't want to draw on top or the side. Here's my test case: x <- rnorm(100) z <- gl(2,50) y <- rnorm(100, mean= 1.8*as.numeric(z)) plot(x,y,type="n", axes=F) points(x,y, pch="$",cex=0.7, col=z) axis(1, col="green", col.axis="green") axis(2, col="red", col.axis="red") Can I cause the 2 axes to "cross" as desired? The axis help says the axis is clipped at the plot region, but it seems to get clipped even more narrowly thanthat. I've been searching in r-help quite a bit and am a little surprised how difficult this is.... -- Paul E. Johnson Professor, Political Science 1541 Lilac Lane, Room 504 University of Kansas ______________________________________________ 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. [[alternative HTML version deleted]]
on 02/13/2009 01:25 PM Paul Johnson wrote:> Hello, everybody. > > A student asked me a howto question I can't answer. We want the > length of the drawn axes to fill the full width and height of the > plot, like so: > > | > | * > | * > | * > ---|----------------- > > However, when we use plot with axes=F and then use the axis commands > to add the axes, they do not cross over each other. We get > > > | * > | * > * > ---------- > > The axes are not wide enough to cover the entire range of the data. We > do not want to add a box() command, which is a usual answer for this, > because we don't want to draw on top or the side. > > Here's my test case: > > x <- rnorm(100) > z <- gl(2,50) > y <- rnorm(100, mean= 1.8*as.numeric(z)) > > plot(x,y,type="n", axes=F) > points(x,y, pch="$",cex=0.7, col=z) > axis(1, col="green", col.axis="green") > axis(2, col="red", col.axis="red") > > Can I cause the 2 axes to "cross" as desired? > > The axis help says the axis is clipped at the plot region, but it > seems to get clipped even more narrowly thanthat. > > I've been searching in r-help quite a bit and am a little surprised > how difficult this is....Paul, I am guessing that you want: x <- rnorm(100) z <- gl(2,50) y <- rnorm(100, mean= 1.8*as.numeric(z)) plot(x,y,type="n", axes=F) points(x,y, pch="$",cex=0.7, col=z) axis(1, col="green", col.axis="green") axis(2, col="red", col.axis="red") # Draw the box like an "L" on the bottom and left only box(bty = "l") Note that you can specify which sides the 'box' is created upon by using the 'bty' argument. See ?box for more information. Also, by default, the axes extend the range of 'x' and 'y' by 4%. You can use 'xaxs = i' and 'yaxs = i' in the plot() call to restrict the axes to the true ranges of 'x' and 'y'. This would be important, for example, when you want the lower left hand corner of the plot to be at exact coordinates such as 0,0. See ?par for more information. HTH, Marc Schwartz