RDX2 X  panelFill source %function(col="#D0D0D0",border=NA,...) { xy <- par("usr") Mpolygon(xy[c(1, 2, 2, 1)], xy[c(3, 3, 4, 4)],col=col,border=border,xpd=T,...) }þý$ col #D0D0D0 border € ...ûþ { <- xy par usrþþ polygon [ÿ c?ð@@?ðþþ ÿÿ ÿ@@@@þþÿÿÿÿ xpd Tÿþþ panelGridÿ 7function(x = NULL, y = NULL, col = 2, lwd = 1, lty = 1) { if(!is.null(x)) .abline(v = x, lwd = lwd, lty = lty, col = col) if(!is.null(y)) .abline(h = y, lwd = lwd, lty = lty, col = col) }þý xþ yþÿ@ lwd?ð lty?ðþÿ if ! is.nullÿþþ abline vÿÿÿÿÿÿÿþþÿÿÿÿþþÿ hÿÿÿÿÿÿÿþþþ panelInboundsÿ function(bnds) { grid = pretty(bnds) -return(grid[bnds[1] < grid & grid < bnds[2]]) }þý bndsûþÿ = grid prettyÿþþ return ÿÿ & < ÿÿ?ðþÿþ!ÿÿ ÿÿ@þþþþþþ panelLayoutÿJ =function(nrow = 1, ncol = 1, leftMargin = 0, rightMargin = 0, & topMargin = 1, bottomMargin = 0, 7 borders = rep(0.5, 4), colSize = 1, rowSize = 1, 1# The figure borders are left, right, top, bottom #colSep = 0, rowSep = 0, pad = NULL) { W# Note fig matrices rounded to 6 places in an effort of avoid a R problem with fig when )# values appear in exponential notation. oldpar = par() din = oldpar$din din.x = din[1] din.y = din[2] BplotX = din.x - borders[1] - borders[2] - leftMargin - rightMargin BplotY = din.y - borders[3] - borders[4] - bottomMargin - topMargin Bxbnds = c(0, leftMargin, leftMargin + plotX, leftMargin + plotX + 8rightMargin) + borders[1] #shift all by the left border @ybnds = c(0, bottomMargin, bottomMargin + plotY, bottomMargin + >plotY + topMargin) + borders[4] # shift all by bottom border )fig.scale = c(din.x, din.x, din.y, din.y) Eleftfig = c(xbnds[1] - borders[1], xbnds[2] + borders[2], ybnds[1] - "borders[4], ybnds[4] + borders[3]) Frightfig = c(xbnds[3] - borders[1], xbnds[4] + borders[2], ybnds[1] - "borders[4], ybnds[4] + borders[3]) Dtopfig = c(xbnds[1] - borders[1], xbnds[4] + borders[2], ybnds[3] - "borders[4], ybnds[4] + borders[3]) Dbotfig = c(xbnds[1] - borders[1], xbnds[4] + borders[2], ybnds[1] - "borders[4], ybnds[2] + borders[3]) (colSep = panelLengthen(colSep, ncol + 1) (rowSep = panelLengthen(rowSep, nrow + 1) >if(is.null(pad)) pad = c(borders[1] + colSep[1] + leftMargin, 5borders[2] + colSep[ncol + 1] + rightMargin, borders[ 03] + rowSep[1] + topMargin, borders[4] + rowSep[ nrow + 1] + bottomMargin) +# The borders should align around the edge. colSep = cumsum(colSep) rowSep = cumsum(rowSep) plotX = plotX - colSep[ncol + 1] plotY = plotY - rowSep[nrow + 1] #relx = panelLengthen(colSize, ncol) #rely = panelLengthen(rowSize, nrow) relx = relx/sum(relx) rely = rely/sum(rely) !xinc = plotX * cumsum(c(0, relx)) !yinc = plotY * cumsum(c(0, rely)) -fig = matrix(0, nrow = nrow * ncol, ncol = 4) k = 0 for(i in 1:nrow) { for(j in 1:ncol) { k = k + 1 3fig[k, 1] = xbnds[2] + xinc[j] + colSep[j] - pad[1] 7fig[k, 2] = xbnds[2] + xinc[j + 1] + colSep[j] + pad[2] 3fig[k, 4] = ybnds[3] - yinc[i] - rowSep[i] + pad[3] 7fig[k, 3] = ybnds[3] - yinc[i + 1] - rowSep[i] - pad[4] } } 1labfig = rbind(leftfig, rightfig, topfig, botfig) fig = abs(t(t(fig)/fig.scale)) labfig = t(t(labfig)/fig.scale) 8# coltabs are in inches and start inside the left border Ccoltabs = cbind(c(0, colSep + xinc + leftMargin), leftMargin + c(0, 4colSep) + c(xinc, xinc[length(xinc)] + rightMargin)) 8# rowtabs are in inches and start below the upper border * # yinc is padded with a leading 0. Arowtabs = cbind(c(ybnds[3], ybnds[3] - rowSep - c(yinc[-1], yinc[ ÿ?ÿþþÿIÿ abs tDÿSÿIÿþ;ÿþþþþÿPÿSÿDÿSÿPÿþ;ÿþþþÿ coltabs cbind ÿ9ÿ9ÿ-ÿFÿþ%ÿþþ9ÿ9ÿ%ÿ ÿ-ÿþþ ÿFÿ9ÿ ÿFÿ lengthFÿþþ&ÿþþþþþÿ rowtabs6ÿUÿ ÿ ÿ:ÿ@þ6ÿ6ÿ ÿ:ÿ@þ.ÿþ ÿ ÿHÿ6ÿ?ðþþ9ÿ ÿHÿ9ÿ#ÿ?ðþþ(ÿþþþþ ÿ ÿ:ÿ@þ6ÿ6ÿ ÿ:ÿ@þ.ÿþHÿþþþ ÿ)ÿ@þþþ list dim ÿ#ÿ$ÿþ datfig roundIÿ@þPÿ[ÿPÿ@þ brd)ÿ/ÿ/ÿTÿTÿWÿWÿ figsize ÿ3ÿ4ÿþþþ@ÿÿ function(x, n) { ) newx <- rep(x, max(n/length(x), 1)) length(newx) <- n  return(newx) }þýÿû nûþÿÿ newx*ÿÿ maxDÿ^ÿVÿÿþþ?ðþþþÿVÿ_ÿþ^ÿþÿ_ÿþþ panelOutlineÿ )function(col = "black", lwd = 1, lty = 1) { xy <- par("usr") Fpolygon(xy[c(1, 2, 2, 1)], xy[c(3, 3, 4, 4)],density=0,col=col, xpd=T) }þýÿ blackÿ?ðÿ?ðþÿÿÿ ÿ usrþþ ÿ ÿÿ ÿ?ð@@?ðþþ ÿÿ ÿ@@@@þþ densityÿÿ ÿÿþþ panelScaleÿ Afunction(rx = c(0, 1), ry = c(0, 1),firstp=FALSE, inches = FALSE) { if(inches) { pin = par("pin") rx = c(0, pin[1]) ry = c(0, pin[2]) } warn = unlist(options('warn'))  options(warn=-1)  par(new=TRUE)  options(warn=warn) ;plot(rx, ry, type = "n", axes = F, xaxs = "i", yaxs = "i", xlab = "", ylab = "", main = "") return(list(rx = rx, ry = ry)) }þý rx ÿ?ðþ ry ÿ?ðþ firstp  inches þÿÿgÿÿÿ pin ÿ pinþþÿdÿ ÿ ÿhÿ?ðþþþÿeÿ ÿ ÿhÿ@þþþþþÿ warn unlist options warnþþþkÿiÿ6ÿ?ðþþ ÿ new þkÿiÿiÿþ plotdÿeÿ type n axes F xaxs i yaxs i xlab  ylab  main þÿXÿdÿdÿeÿeÿþþþ panelSelectÿ -function(layout, i = 1, j = 1, margin = NULL) { dim = layout$dim if(i > dim[1] || j > dim[2]) fatal("Dimension error") if(is.null(margin)) { k = dim[2] * (i - 1) + j par(fig = layout$datfig[k, ], % mai = layout$pad[c(4, 1, 3, 2)] ) } else { vec = 1:4 0nam = c("left", "right", "top", "bottom", "bot") ind = match(margin, nam) if(is.na(ind)) fatal("Bad label region name") if(ind == 5) ind = 4 par(fig = layout$labfig[ind, ], !mai = layout$brd[c(4, 1, 3, 2)] ) } #"done" }þý layoutûMÿ?ðOÿ?ð marginþþÿÿYÿ2ÿwÿ dimþþÿ || >Mÿ ÿYÿ?ðþþzÿOÿ ÿYÿ@þþþ fatal Dimension errorþþÿÿxÿþÿÿKÿ9ÿGÿ ÿYÿ@þ (6ÿMÿ?ðþþþOÿþþ ÿIÿ ÿ2ÿwÿ datfigþKÿûþ mai ÿ2ÿwÿ padþ ÿ@?ð@@þþþþÿÿ vecNÿ?ð@þþÿ nam ÿ left right top bottom botþþÿ ind matchxÿÿþþÿ is.na€ÿþ{ÿ Bad label region nameþþÿ ==€ÿ@þÿ€ÿ@þþ ÿIÿ ÿ2ÿwÿ labfigþ€ÿûþ}ÿ ÿ2ÿwÿ brdþ ÿ@?ð@@þþþþþþþ