[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