[Rd] legend() patch never seems to have made it in
bolker@zoo.ufl.edu
bolker@zoo.ufl.edu
Mon, 15 Jan 2001 11:05:15 -0500 (EST)
Perhaps I should have submitted this as a bug so that it would be
officially tracked. It's not a big deal, but here it is again (I can't
remember which version this patch is against, but I don't think legend()
has changed since then ...)
Basically, the problem is that if you want to have "opaque" points that
overlay lines (rather than using type="b" and having the lines leave a
little bit of space around the points), you can use pch=21,bg=par("bg"),
but this is hard to replicate in legend().
For example:
x <- 1:10
y <- runif(10)
plot(x,y,type="l",ylim=c(0,1.2))
points(x,y,pch=21,bg="white")
legend(6,1.2,"foo",pch=21,pt.bg="white",lty=1)
Here's the patch, which reverses the order of line- and point-drawing
so that points come later and can overwrite the lines:
*** 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
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._