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

ripley@stats.ox.ac.uk ripley at stats.ox.ac.uk
Tue Nov 12 22:29:09 CET 2002

On Tue, 12 Nov 2002, 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?)

Nothing: it is still there on the systems that have ever had it, Windows
and Unix-alikes with an X11 display.  What's your problem in finding it?
What does ?png give on your system?

> 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)

Look up the xpd par argument to plot outside the plot region (but still in
the figure region).

> 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.

It's you who confused it.  Print the result of locator(1) and look up
?legend and you will see why you get the message.  If you call a function
with incorrect arguments, why don't you expect an error message telling
you so?

> So, is there any way to specify the location with locator() AND to save that
> plot to a file?

Yes, via dev.copy and friends.

> 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.

There is only one coordinate system, that set by the plot() command.
*None* of the R graphics commands tell you the coordinate system to be
used precisely because there is only one at a time.

There *is* are example on the help page for legend.

Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272860 (secr)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

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