Dermot MacSweeney pointed out to me that after my "fix" of legend(), points were no longer coming out placed in the middle of the lines, but at the right-hand edge. It turns out that naively swapping the order of point-drawing and line-drawing also messes up the bookkeeping that legend() does on the current x-location. Here's my patch, which fixes that bookkeeping (and incidentally substitutes "seg.len" for 2 where it refers to the length of the drawn line segments in units of x.char; one could make seg.len user-settable, I don't know if it's worth the bother). This time the patch is against the current legend() in R-devel. *** new-legend.R Thu Oct 19 16:25:36 2000 --- R-devel/src/library/base/R/legend.R Wed Sep 6 04:11:16 2000 *************** *** 141,171 **** } if(has.pch || do.lines) col <- rep(col,length.out=n.leg) - - if (do.lines) { #- draw lines --------------------- - seg.len <- 2 # length of drawn segment, in xchar units - ok.l <- if(missing(lty)) { lty <- 1; TRUE } else lty > 0 - if(missing(lwd)) lwd <- par("lwd") - lty <- rep(lty, length.out = n.leg) - lwd <- rep(lwd, length.out = n.leg) - if(trace) - catn(" segments2(",xt[ok.l] + x.off*xchar ,",", yt[ok.l], - ", dx=",seg.len*xchar,", dy=0, ...)", sep="") - segments2(xt[ok.l] + x.off*xchar, yt[ok.l], dx= seg.len*xchar, dy=0, - lty = lty[ok.l], lwd = lwd[ok.l], col = col[ok.l]) - # if (!merge) - xt <- xt + (seg.len+x.off) * xchar - } if (has.pch) { #- draw points ------------------- pch <- rep(pch, length.out=n.leg) pt.bg <- rep(pt.bg, length.out=n.leg) ok <- is.character(pch) | pch >= 0 ! x1 <- (if(merge) xt-(seg.len/2)*xchar else xt)[ok] y1 <- yt[ok] if(trace) catn(" points2(", x1,",", y1,", pch=", pch[ok],"...)") points2(x1, y1, pch=pch[ok], col=col[ok], cex=cex, bg = pt.bg[ok]) if (!merge) xt <- xt + dx.pch } xt <- xt + x.intersp * xchar --- 141,169 ---- } if(has.pch || do.lines) col <- rep(col,length.out=n.leg) if (has.pch) { #- draw points ------------------- pch <- rep(pch, length.out=n.leg) pt.bg <- rep(pt.bg, length.out=n.leg) ok <- is.character(pch) | pch >= 0 ! x1 <- (if(merge) xt + 0.2*xchar else xt)[ok] y1 <- yt[ok] if(trace) catn(" points2(", x1,",", y1,", pch=", pch[ok],"...)") points2(x1, y1, pch=pch[ok], col=col[ok], cex=cex, bg = pt.bg[ok]) if (!merge) xt <- xt + dx.pch + } + if (do.lines) { #- draw lines --------------------- + ok.l <- if(missing(lty)) { lty <- 1; TRUE } else lty > 0 + if(missing(lwd)) lwd <- par("lwd") + lty <- rep(lty, length.out = n.leg) + lwd <- rep(lwd, length.out = n.leg) + if(trace) + catn(" segments2(",xt[ok.l] + x.off*xchar ,",", yt[ok.l], + ", dx=",2*xchar,", dy=0, ...)", sep="") + segments2(xt[ok.l] + x.off*xchar, yt[ok.l], dx= 2*xchar, dy=0, + lty = lty[ok.l], lwd = lwd[ok.l], col = col[ok.l]) + ## if (!merge) + xt <- xt + (2+x.off) * xchar } xt <- xt + x.intersp * xchar -- 318 Carr Hall bolker@zoo.ufl.edu Zoology Department, University of Florida http://www.zoo.ufl.edu/bolker Box 118525 (ph) 352-392-5697 Gainesville, FL 32611-8525 (fax) 352-392-3704 -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-devel-request@stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._