[R] trouble positioning legends on barplot written to a file

Paul Murrell p.murrell at auckland.ac.nz
Tue Nov 12 21:19:14 CET 2002


Hi

It is possible to draw the legend outside the plot, but it is
inconvenient because the location is specified in terms of the scales on
the x- and y-axes.  Positioning therefore becomes a matter of trial and
error.  In the example below, I create space for the legend using
par(oma) [again the size of the margin is a matter of guess work] and
make sure that the legend is not clipped out of existence by specifying
par(xpd=NA) ...

   # generate some dummy data that sums to 100 in each col
   data(VADeaths)
   temp <- function(x) {
     sample(seq(10, 30, 5))
   }
   dummy <- apply(VADeaths, 2, temp)
   # Plotting ...
   par(oma=c(0, 0, 5, 0), xpd=NA)
   colours <- 1:5
   barplot(dummy, col=colours)
   legend(par("usr")[1], 110,
          row.names(VADeaths), fill=colours,
          yjust=0, horiz=TRUE)

You might have other colours you would prefer to use :)

Hope that helps.

Paul


Tom Arnold wrote:
> 
> I'm trying to generate some plots for print publication and I'm having trouble
> getting them the way I want. I get a plot with a legend that overlaps the bars
> and looks bad. Also, I'm saving this as PDF file (whatever happened to the
> "png" function to save as PNG format, in r 1.4.1?)
> 
> I've tried a number of things, which produce a number of questions.
> 
> 1) it seems that the "legend" for a plot must be within the plot area. Is
> there a way to put the legend above, below, or to the side of the plot? The
> particular data I have fill up the plotting area (stacked bar charts, going to
> 100% in each bar)
> 
> 2) I've tried using "locator()" to position the legend. This only works, so
> far, if I am not using trying to divert output to another device -- like
> creating a PDF via
> pdf();
> barplot(resultmat);
> dev.off();
> 
> so if I take out the pdf() and the dev.off() and just do this:
> barplot(resultmat);
> legend(locator(1),legend=l,fill=colors);
> 
> it works, on the graphics display device window on screen.
> 
> However, if I do this:
> pdf(onefile=FALSE);
> barplot(resultmat);
> legend(locator(1),legend=l,fill=colors);
> dev.off();
> 
> I get:
> >Error in legend(locator(1),legend = l : missing y
> 
> Also it doesn't let me specify a point. I suppose that's not so surprising,
> because it is drawing to a non-interactive graphics device (the PDF "device"
> is non-interactive, right?), but the error message is confusing.
> 
> So, is there any way to specify the location with locator() AND to save that
> plot to a file?
> 
> And if I don't use "locator' then I have to specify the legend location to
> "legend(x,y, legend) but the documentation doesn't say what coordinate system
> that's supposed to be in.
> 
> TIA.
> 
> Tom Arnold
> 
> -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
> r-help 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-help-request at stat.math.ethz.ch
> _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._

-- 
Dr Paul Murrell
Department of Statistics
The University of Auckland
Private Bag 92019
Auckland
New Zealand
64 9 3737599 x5392
paul at stat.auckland.ac.nz
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-help 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-help-request at stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._



More information about the R-help mailing list