Hi Jim, Thanks a lot, exactly what I was looking for.
Cheers, Marius On Thu, Jun 23, 2016 at 11:06 PM, Jim Lemon <drjimle...@gmail.com> wrote: > Hi Marius, > There are a few things that are happening here. First, the plot area > is not going to be the same as your x and y limits unless you say so: > > # run your first example > par("usr") > [1] -0.04 1.04 -0.04 1.04 > > # but > plot(NA, type = "n", ann = FALSE, axes = FALSE, > xlim = 0:1, ylim = 0:1,xaxs="i",yaxs="i") > box() > rect(xleft = 0, ybottom = 0, xright = 1, ytop = 1, col = "grey80") > par("usr") > [1] 0 1 0 1 > > Second, the "rect" function is automatically clipped to the plot area, > so you may lose a bit at the edges if you don't override this: > > par(xpd=TRUE) > rect(...) > par(xpd=FALSE) > > Finally your second example simply multiplies the first problem by > specifying a layout of more than one plot. Applying the "xaxs" and > "yaxs" parameters before you start plotting will fix this: > > par(xaxs="i",yaxs="i") > > Jim > > On Fri, Jun 24, 2016 at 12:29 PM, Marius Hofert > <marius.hof...@uwaterloo.ca> wrote: >> Hi, >> >> I would like to replicate the behavior of box() with rect() (don't ask why). >> However, my rect()angles are always too small. I looked a bit into the >> internal C_box but >> couldn't figure out how to solve the problem. Below is a minimal >> working (and a slightly bigger) example. >> >> Cheers, >> Marius >> >> ## MWE >> plot(NA, type = "n", ann = FALSE, axes = FALSE, xlim = 0:1, ylim = 0:1) >> rect(xleft = 0, ybottom = 0, xright = 1, ytop = 1, col = "grey80") # >> should match box() >> box() >> >> ## Extended example >> >> ## Basic plot >> my_rect <- function() >> { >> plot(NA, type = "n", ann = FALSE, axes = FALSE, xlim = 0:1, ylim = 0:1) >> rect(xleft = 0, ybottom = 0, xright = 1, ytop = 1, col = "grey80") >> # should match box() >> box() >> } >> >> ## Layout >> lay <- matrix(0, nrow = 3, ncol = 3, byrow = TRUE) >> lay[1,1] <- 1 >> lay[2,1] <- 2 >> lay[2,2] <- 3 >> lay[2,3] <- 4 >> lay[3,3] <- 5 >> layout(lay, heights = c(1, 10, 1), widths = c(10, 1, 10)) >> layout.show(5) # => no space between rectangles; calls box() to draw the >> boxes >> >> ## Fill layout >> par(oma = rep(0, 4), mar = rep(0, 4)) >> my_rect() >> my_rect() >> my_rect() >> my_rect() >> my_rect() >> ## => spaces between rectangles => why?/how to avoid? >> >> ______________________________________________ >> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see >> 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. ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see 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.