You can use the grconvertX and grconvertY functions to find the
coordinates (in user coordinates to pass to rect) of the figure region
(or other regions).

Probably something like:
grconvertX(c(0,1), from='nfc', to='user')
grconvertY(c(0,1), from='nfc', to='user')




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



-- 
Gregory (Greg) L. Snow Ph.D.
538...@gmail.com

______________________________________________
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