Hi Jim,

Here is a follow-up question: How would you replicate box("figure")
(instead of box() = box("plot"))?
I tried to fill the plotted box but there seems to be no argument to
box("figure") that does that. If that's indeed the case, one could
work again with rect() (thus replicating box("figure")), but how can
one specify the exact location/width/height of the rectangle? (see
example below)

Cheers,
M

plot(NA, type = "n", ann = TRUE, axes = TRUE, xlim = 0:1, ylim = 0:1)
box("figure", col = "red", lwd = 2) # how to fill?

par(xpd = TRUE)
width = 1.4 # obviously not correct...
height <- width
loc.x <- 0.5
loc.y <- 0.5
xleft <- loc.x-width/2
xright <- loc.x+width/2
ybottom <- loc.y-height/2
ytop <- loc.y+height/2
rect(xleft = xleft, ybottom = ybottom, xright = xright, ytop = ytop,
     col = adjustcolor("grey80", alpha.f = 0.5))
par(xpd = FALSE)

On Fri, Jun 24, 2016 at 8:40 PM, Marius Hofert
<marius.hof...@uwaterloo.ca> wrote:
> 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.

Reply via email to