Frederic.Schutz at isb-sib.ch
2009-Aug-27 11:25 UTC
[Rd] Wishlist: specify the border color of boxes in legend() (PR#13913)
I could not find a way to specify the border color of the boxes drawn in a legend, so that the legend can match exactly the colors of the actual plot (e.g. in the case of two superimposed histograms which have different shading and different borders). Indeed, the legend function seems to hard code the color "black" for the borders in this call: rect2(left = xt, top = yt + ybox/2, dx = xbox, dy = ybox, col = fill, density = density, angle = angle, border = "black") I worked around this by adding a "border" argument to the function (which defaults to "black"), and changing the call above. It works for me; I have looked quickly at the rest of the function to see if there would be a side effect and did not see any (but I haven't checked carefully). This could be a useful improvement of the legend() function; in case the change described above looks usable, I attach two simple diff files (for the function itself and the manual page). Cheers, Fr?d?ric
maechler at stat.math.ethz.ch
2009-Aug-28 12:35 UTC
[Rd] Wishlist: specify the border color of boxes in legend() (PR#13913)
>>>>> "FS" == Frederic Schutz <Frederic.Schutz at isb-sib.ch> >>>>> on Thu, 27 Aug 2009 13:25:16 +0200 (CEST) writes:FS> I could not find a way to specify the border color of the boxes drawn in FS> a legend, so that the legend can match exactly the colors of the actual FS> plot (e.g. in the case of two superimposed histograms which have FS> different shading and different borders). FS> Indeed, the legend function seems to hard code the color "black" for the FS> borders in this call: FS> rect2(left = xt, top = yt + ybox/2, dx = xbox, dy = ybox, FS> col = fill, density = density, angle = angle, FS> border = "black") FS> I worked around this by adding a "border" argument to the function FS> (which defaults to "black"), and changing the call above. It works for FS> me; I have looked quickly at the rest of the function to see if there FS> would be a side effect and did not see any (but I haven't checked FS> carefully). FS> This could be a useful improvement of the legend() function; in case the FS> change described above looks usable, I attach two simple diff files (for FS> the function itself and the manual page). FS> Cheers, FS> Fr?d?ric Thank you, Fr?d?ric, indeed, the changes are so minimal that I will apply the two patches and they should be in "R-devel" (for R 2.10.0) soon. Best regards, Martin Maechler, ETH Zurich FS> --------------040007030503070307040509 FS> Content-Type: text/x-patch; FS> name="legend.R.diff" FS> Content-Transfer-Encoding: 7bit FS> Content-Disposition: inline; FS> filename="legend.R.diff" FS> --- legend.R~ 2009-03-20 00:05:18.000000000 +0100 FS> +++ legend.R 2009-08-27 11:52:02.000000000 +0200 FS> @@ -15,8 +15,8 @@ FS> # http://www.r-project.org/Licenses/ FS> legend <- FS> -function(x, y = NULL, legend, fill=NULL, col = par("col"), lty, lwd, pch, FS> - angle = 45, density = NULL, bty = "o", bg = par("bg"), FS> +function(x, y = NULL, legend, fill=NULL, col = par("col"), border="black", FS> + lty, lwd, pch, angle = 45, density = NULL, bty = "o", bg = par("bg"), FS> box.lwd = par("lwd"), box.lty = par("lty"), box.col = par("fg"), FS> pt.bg = NA, cex = 1, pt.cex = cex, pt.lwd = lwd, FS> xjust = 0, yjust = 1, x.intersp = 1, y.intersp = 1, adj = c(0, 0.5), FS> @@ -217,7 +217,7 @@ FS> fill <- rep(fill, length.out = n.leg) FS> rect2(left = xt, top=yt+ybox/2, dx = xbox, dy = ybox, FS> col = fill, FS> - density = density, angle = angle, border = "black") FS> + density = density, angle = angle, border = border) FS> } FS> xt <- xt + dx.fill FS> } FS> --------------040007030503070307040509 FS> Content-Type: text/x-patch; FS> name="legend.Rd.diff" FS> Content-Transfer-Encoding: 7bit FS> Content-Disposition: inline; FS> filename="legend.Rd.diff" FS> --- legend.Rd~ 2009-03-20 00:05:18.000000000 +0100 FS> +++ legend.Rd 2009-08-27 11:57:28.000000000 +0200 FS> @@ -8,7 +8,7 @@ FS> \title{Add Legends to Plots} FS> \usage{ FS> legend(x, y = NULL, legend, fill = NULL, col = par("col"), FS> - lty, lwd, pch, FS> + border="black", lty, lwd, pch, FS> angle = 45, density = NULL, bty = "o", bg = par("bg"), FS> box.lwd = par("lwd"), box.lty = par("lty"), box.col = par("fg"), FS> pt.bg = NA, cex = 1, pt.cex = cex, pt.lwd = lwd, FS> @@ -34,6 +34,8 @@ FS> with the specified colors (or shaded in the specified colors) FS> to appear beside the legend text.} FS> \item{col}{the color of points or lines appearing in the legend.} FS> + \item{border}{the border color for the boxes (used only if FS> + \code{fill} is specified).} FS> \item{lty, lwd}{the line types and widths for lines appearing in the FS> legend. One of these two \emph{must} be specified for line drawing.} FS> \item{pch}{the plotting symbols appearing in the legend, either as FS> --------------040007030503070307040509-- FS> ______________________________________________ FS> R-devel at r-project.org mailing list FS> https://stat.ethz.ch/mailman/listinfo/r-devel