[R] asp=1 and aspect ratio

Marc Schwartz MSchwartz at medanalytics.com
Fri Mar 19 17:01:56 CET 2004


On Fri, 2004-03-19 at 09:29, Marc Schwartz wrote:
> On Fri, 2004-03-19 at 09:06, Robin Hankin wrote:
> > Hi everyone
> > 
> > I want a square scatterplot with abline(0,1) going exactly through the
> > SW and NE corners.  By "square" I mean that the plotting region is
> > exactly square, and that the axis limits are identical.
> > 
> > x <- 1:20
> > y <- x+rep(c(-1,1),10)
> > lims <- range(c(x,y))
> > 
> > None of the following do this:
> > 
> > plot(x,y) ; abline(0,1)         #not square
> > plot(x,y,asp=1);abline(0,1)     #diagonal line misses corners
> > 
> > plot(x,y,asp=1,xaxs="i",yaxs="i");abline(0,1)
> > #diagonal line misses corners
> > 
> > plot(x,y,xaxs="i",yaxs="i");abline(0,1)
> > #not square and diag misses corners
> > 
> > plot(x,y,xlim=lims,ylim=lims,xaxs="i",yaxs="i");abline(0,1)
> > #not square
> > 
> > plot(x,y,asp=1,xlim=lims,ylim=lims,xaxs="i",yaxs="i");abline(0,1)
> > #not square (plotting region about 8cm by 9.5cm)
> > 
> > 
> > 
> > If I wrap the above lines in
> > 
> > postscript(file="foo.ps", width=5,height=5)
> > [...snip...]
> > dev.off()
> > 
> > then still none of the plots is exactly right [either one or both
> > corners are missed, or the aspect ratio off].  What am I missing?
> 
> This works for me:
> 
> x <- 1:20
> y <- x + rep(c(-1, 1), 10)
> lims <- range(c(x, y))
> plot(x, y, xlim = lims, ylim = lims, xaxs = "i", yaxs = "i")
> abline(0, 1)
> 
> # Plot region is square
> >par("usr")
> [1]  0 21  0 21
> 
> Here is a PS plot generated with:
> 
> postscript(width = 5, height = 5)
> plot(x, y, xlim = lims, ylim = lims, xaxs = "i", yaxs = "i")
> abline(0, 1)
> dev.off()
> 
> http://www.MedAnalytics.com/Rplots.ps
> 
> HTH,
> 
> Marc Schwartz


Robin,

Sorry. It just dawned on me that you were not only referring to the line
meeting the corners, but that the plot region itself by measurement was
square, not just that the coordinates of the plot region were square.

The following adjustment will work and I posted a new PS file at the
same URL:

# Set the plot region to be square
par(pty = "s")

plot(x, y, xlim = lims, ylim = lims, xaxs = "i", yaxs = "i")
abline(0, 1)

HTH,

Marc Schwartz




More information about the R-help mailing list