[R] par("uin") ?

Eik Vettorazzi E.Vettorazzi at uke.uni-hamburg.de
Mon Jul 19 17:32:30 CEST 2010


http://tinyurl.com/34fhcvg


Am 19.07.2010 17:20, schrieb Michael Friendly:
> I inherited a function written either for an older version of R or SPlus
> to draw a brace, "{", in a graph.  It uses par("uin") to determine the
> scaling of the
> quarter circles that make up segments of the brace,  but that setting
> doesn't
> exist in current R.
> I'm guessing that, in the function below, ux, uy can be defined from
> par("usr") and par("pin"), but maybe someone remembers what par("uin")
> was supposed to refer to.
>
> brace <- function (x1 = 0, y1 = 0, x2 = 0, y2 = 1, right = TRUE, rad =
> 0.2)
> {
>    uin <- par("uin")
>    ux <- uin[1]
>    uy <- uin[2]
>    dx <- x2 - x1
>    dy <- y2 - y1
>    alpha <- atan(ux * dx, uy * dy)
>    scale <- sqrt((ux * dx)^2 + (uy * dy)^2)
>    if (scale > 5 * rad)
>        rad <- rad/scale
>    qcirc <- cbind(cos((0:10) * pi/20), sin((0:10) * pi/20))
>    qcircr <- cbind(cos((10:0) * pi/20), sin((10:0) * pi/20))
>    rot <- function(theta) t(cbind(c(cos(theta), sin(theta)),
>        c(-sin(theta), cos(theta))))
>    seg1 <- t(t(rad * qcirc %*% rot(-pi/2)) + c(0, rad))
>    seg4 <- t(t(rad * qcirc) + c(0, 1 - rad))
>    seg3 <- t(t((rad * qcircr) %*% rot(pi)) + c(2 * rad, 0.5 +
>        rad))
>    seg2 <- t(t((rad * qcircr) %*% rot(pi/2)) + c(2 * rad, 0.5 -
>        rad))
>    bra <- rbind(seg1, seg2, seg3, seg4)
>    if (!right)
>        bra <- bra %*% diag(c(-1, 1))
>    bra <- scale * bra %*% rot(-alpha)
>    bra <- bra %*% diag(c(1/ux, 1/uy))
>    bra <- t(t(bra) + c(x1, y1))
>    bra
> }



More information about the R-help mailing list