[R] legend for several graphics

Gavin Simpson gavin.simpson at ucl.ac.uk
Thu Mar 6 17:50:00 CET 2008


On Thu, 2008-03-06 at 09:41 -0700, Greg Snow wrote:
> I think you need a par(xpd=NA) before the legend command (At least it
> did not show up for me until I set xpd).

Hi Greg,

Yes, you are correct. Apologies to the OP, Georg. I must have set xpd =
NA during my tests and not reset it, so when I ran the code without the
par(xpd = FALSE) line, I assumed NA was the default. That was a mistake.

Thanks also for the pointer to cnvrt.coords() - your package keeps being
mentioned for lots of these plotting issues (amongst other topics) on
the list but as yet I have not had chance to take a good look at all it
contains. This is but one more reason to do so.

All the best,

G

> 
> For positioning the overall title and legend, one option is the
> cnvrt.coords function in the TeachingDemos package.  
> 
> To center the overall title over the central column plots (the default
> centers it left to right in the window, but with the margins of the
> plots this looks a little off): after plotting one of the 3 center
> plots, call cnvrt.coords with an x value of 0.5 in plot coordinates
> (input='plt') and save the x value of the "tdev" coordinates.  Then use
> this value as the at argument to mtext.
> 
> To find the values for positioning the legend, give the function the
> coordinates in terms of the device (input='tdev', x can either be .5 for
> centered or the value computed for mtext above) and store the user
> coordinates to pass to legend.
> 
> My modification of your example is:
> 
> library(TeachingDemos)
> op <- par(mfrow = c(3,3), ## split region
>           oma = c(5,0,4,0) + 0.1, ## create outer margin
>           mar = c(5,4,2,2) + 0.1) ## shrink some margins 
> plot(1:10, main = "a", pch = 1:2, col= 1:2) 
> plot(1:10, main = "b", pch = 1:2, col= 1:2) 
> tmp1 <- cnvrt.coords( 0.5, 0, input='plt' )$tdev # save location for
> mtext
> plot(1:10, main = "c", pch = 1:2, col= 1:2) 
> plot(1:10, main = "d", pch = 1:2, col= 1:2) 
> plot(1:10, main = "e", pch = 1:2, col= 1:2) 
> plot(1:10, main = "f", pch = 1:2, col= 1:2) 
> plot(1:10, main = "g", pch = 1:2, col= 1:2) 
> plot(1:10, main = "h", pch = 1:2, col= 1:2) 
> plot(1:10, main = "i", pch = 1:2, col= 1:2) 
> ## title 
> mtext("My Plots", side = 3, outer = TRUE, font = 2, line = 1, cex = 1.2,
> 
> 	at=tmp1$x) 
> ## draw legend 
> par(xpd=NA)
> tmp2 <- cnvrt.coords( tmp1$x, 0.05, input='tdev' )$usr # get location
> for legend
> legend(tmp2$x, tmp2$y, legend = c("Type 1", "Type 2"), 
>  	pch = 1:2, col = 1:2, ncol = 2, xjust=0.5, yjust=0.5)
> par(op)
> 
> 
> Hope this helps, 
> 
> 
> -- 
> Gregory (Greg) L. Snow Ph.D.
> Statistical Data Center
> Intermountain Healthcare
> greg.snow at imail.org
> (801) 408-8111
>  
> 
> 
> > -----Original Message-----
> > From: r-help-bounces at r-project.org 
> > [mailto:r-help-bounces at r-project.org] On Behalf Of Gavin Simpson
> > Sent: Wednesday, March 05, 2008 11:43 AM
> > To: Georg Otto
> > Cc: r-help at stat.math.ethz.ch
> > Subject: Re: [R] legend for several graphics
> > 
> > On Wed, 2008-03-05 at 15:28 +0100, Georg Otto wrote:
> > > Hi,
> > > 
> > > I am trying to generate a figure of 9 plots that are 
> > contained in one 
> > > device by using
> > > 
> > > par(mfrow = c(3,3,))
> > > 
> > > I would like to have 1 common legend for all 9 plots 
> > somewhere outside 
> > > of the plotting area (as opposed to one legend inside each of the 9 
> > > plots, which the function legend() seems to generate by default).
> > > 
> > > Any hint how to do this?
> > 
> > Here's one way:
> > 
> > op <- par(mfrow = c(3,3), ## split region
> >           oma = c(5,0,4,0) + 0.1, ## create outer margin
> >           mar = c(5,4,2,2) + 0.1) ## shrink some margins 
> > plot(1:10, main = "a", pch = 1:2, col= 1:2) plot(1:10, main = 
> > "b", pch = 1:2, col= 1:2) plot(1:10, main = "c", pch = 1:2, 
> > col= 1:2) plot(1:10, main = "d", pch = 1:2, col= 1:2) 
> > plot(1:10, main = "e", pch = 1:2, col= 1:2) plot(1:10, main = 
> > "f", pch = 1:2, col= 1:2) plot(1:10, main = "g", pch = 1:2, 
> > col= 1:2) plot(1:10, main = "h", pch = 1:2, col= 1:2) 
> > plot(1:10, main = "i", pch = 1:2, col= 1:2) ## title 
> > mtext("My Plots", side = 3, outer = TRUE, font = 2, line = 1, 
> > cex = 1.2) ## draw legend legend(-12.5, -6, legend = c("Type 
> > 1", "Type 2"), pch = 1:2, col = 1:2, ncol = 2)
> > par(op)
> > 
> > I had to fiddle by hand with the legend x and y locations to 
> > get it roughly centred. There has to be better way - probably 
> > something to do with reseting the plot region, but I can't 
> > recall how to do that now. If there is, I'm sure someone will 
> > tell me what I overlooked.
> > 
> > Is this what you were looking for?
> > 
> > G
> > 
> > > 
> > > Best,
> > > 
> > > Georg
> > > 
> > > ______________________________________________
> > > R-help at 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.
> > --
> > %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
> >  Dr. Gavin Simpson             [t] +44 (0)20 7679 0522
> >  ECRC, UCL Geography,          [f] +44 (0)20 7679 0565
> >  Pearson Building,             [e] gavin.simpsonATNOSPAMucl.ac.uk
> >  Gower Street, London          [w] http://www.ucl.ac.uk/~ucfagls/
> >  UK. WC1E 6BT.                 [w] http://www.freshwaters.org.uk
> > %~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
> > 
> > ______________________________________________
> > R-help at 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.
> > 
> 
-- 
%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
 Dr. Gavin Simpson             [t] +44 (0)20 7679 0522
 ECRC, UCL Geography,          [f] +44 (0)20 7679 0565
 Pearson Building,             [e] gavin.simpsonATNOSPAMucl.ac.uk
 Gower Street, London          [w] http://www.ucl.ac.uk/~ucfagls/
 UK. WC1E 6BT.                 [w] http://www.freshwaters.org.uk
%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%



More information about the R-help mailing list