Hi everyone, here's the same patch as a new branch on GitHub.
http://github.com/kloesing/ggplot2/commit/a25e4fbfa4017ed1 Best, --Karsten On 6/7/10 3:39 PM, Karsten Loesing wrote: > Hi Hadley and everyone, > > here's a patch for ggplot2 that fixes the behavior of > opts(legend.position={left,top,bottom}). If you try the following code > in an unmodified ggplot2 > > options(warn = -1) > suppressPackageStartupMessages(library("ggplot2")) > data <- data.frame( > x = c(1, 2, 3, 4, 5, 6), > y = c(2, 3, 4, 3, 4, 5), > colour = c(TRUE, TRUE, TRUE, FALSE, FALSE, FALSE)) > ggplot(data, aes(x = x, y = y, colour = colour)) + > geom_line() + opts(title = "title", legend.position = "right") > ggplot(data, aes(x = x, y = y, colour = colour)) + > geom_line() + opts(title = "title", legend.position = "left") > ggplot(data, aes(x = x, y = y, colour = colour)) + > geom_line() + opts(title = "title", legend.position = "top") > ggplot(data, aes(x = x, y = y, colour = colour)) + > geom_line() + opts(title = "title", legend.position = "bottom") > > you'll see that plots 2 to 4 are broken. > > I think I located the bug in surround_viewports() where the graphical > elements are placed into the grid. If we increment all rows and columns > of the graphical elements for positions "left", "top", and "bottom" by > 1, those graphs look sane again. I assume that a new first row and > column were added at some point in the development, but only the > parameters for the default position "right" were adjusted. Here's the patch: > > > --- ggplot2-orig2 2010-06-07 13:14:35.000000000 +0200 > +++ ggplot2 2010-06-07 15:22:33.000000000 +0200 > @@ -7003,27 +7003,27 @@ > ) > } else if (position == "left") { > viewports <- vpList( > - vp("panels", 2, 3), > - vp("legend_box", 2, 1), > - vp("ylabel", 2, 2), > - vp("xlabel", 3, 3), > - vp("title", 1, 3) > + vp("panels", 3, 4), > + vp("legend_box", 3, 2), > + vp("ylabel", 3, 3), > + vp("xlabel", 4, 4), > + vp("title", 2, 4) > ) > } else if (position == "top") { > viewports <- vpList( > - vp("panels", 3, 2), > - vp("legend_box", 2, 2), > - vp("ylabel", 3, 1), > - vp("xlabel", 4, 2), > - vp("title", 1, 2) > + vp("panels", 4, 3), > + vp("legend_box", 3, 3), > + vp("ylabel", 4, 2), > + vp("xlabel", 5, 3), > + vp("title", 2, 3) > ) > } else if (position == "bottom") { > viewports <- vpList( > - vp("panels", 2, 2), > - vp("legend_box", 4, 2), > - vp("ylabel", 2, 1), > - vp("xlabel", 3, 2), > - vp("title", 1, 2) > + vp("panels", 3, 3), > + vp("legend_box", 5, 3), > + vp("ylabel", 3, 2), > + vp("xlabel", 4, 3), > + vp("title", 2, 3) > ) > } else { > viewports <- vpList( > > > Best, > --Karsten > ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.