problem with legend on other graphics devices
1 answers - 2363 bytes -

Hi,
I have a bit of a problem with a legend in png, eps and pdf plots
produced from a custom plotting function. I was writing a little
function to produce some stock plots for a routine analysis conducted in
our lab. I have a wrapper function figures() (see below) that produces
eps, png and pdf versions of the lab output. When I draw the plot on the
X11() device the correct amount of space is made available for the
legend, but when I draw the plot directly on the png, postscript or pdf
devices, the legend is placed too close to the edge of the plot and is
clipped.
This example uses the actual test data I'm using to write the functions.
figures() calls the "dating" plot method I wrote to do the plotting, and
dating() is a wrapper for read.csv() that creates a "dating" object with
the lab analysis results and some extra meta data. All the R code is in
dating.R at the URL below.
felb5 <- dating("",
cs = 1963, csError = 5,
csDepth = 22.5, csDepthError = 2)
source("")
plot(felb5, as.Age = TRUE)
figures(felb5, "felbrig5", as.Age = TRUE)
As you can see, in the generated png, eps and pdf files the legend is
clipped, but it displays fine on the screen. From the list archives, I
seem to be doing things in the recommended way (not using dev.copy()
etc.)
What can I do to force sufficient space for the legend in the pdf,
postscript and png plots?
Many thanks,
Gav
figures <- function(object, filename, eps = TRUE, png = TRUE, pdf = TRUE,
inch.width = 6, inch.height = 6, horizontal = TRUE,
pixel.width = 600, pixel.height = 600,
paper = "special", onefile = FALSE, pointsize = 12, )
{
if(eps) {
postscript(paste(filename, ".eps"), width = inch.width,
height = inch.height, onefile = onefile, paper = paper,
pointsize = pointsize, horizontal = horizontal)
plot(object, )
invisible(dev.off())
}
if(png) {
png(paste(filename, ".png"), width = pixel.width, height = pixel.height,
pointsize = pointsize)
plot(object, )
invisible(dev.off())
}
if(pdf) {
pdf(paste(filename, ".pdf"), width = inch.width,
height = inch.height, onefile = onefile, paper = paper,
pointsize = pointsize)
plot(object, )
invisible(dev.off())
}
}
No.1 | | 1347 bytes |
| 
Fri, 2006-06-16 at 19:42 +0100, Gavin Simpson wrote:
Hi,
I have a bit of a problem with a legend in png, eps and pdf plots
produced from a custom plotting function. I was writing a little
function to produce some stock plots for a routine analysis conducted in
our lab. I have a wrapper function figures() (see below) that produces
eps, png and pdf versions of the lab output. When I draw the plot on the
X11() device the correct amount of space is made available for the
legend, but when I draw the plot directly on the png, postscript or pdf
devices, the legend is placed too close to the edge of the plot and is
clipped.
Hi,
To follow up, the posted code does work and the legend is not clipped on
my home machine but that was a slightly less-up-to-date version of R
2.3.1 patched than the machine at work. So I compiled the latest R2.3.1
patched (svn revision 38350) and it works fine there also. So must have
been something peculiar to my set-up at work or R session at the time.
For the record:
version
_
platform i686-pc-linux-gnu
arch i686
os linux-gnu
system i686, linux-gnu
status Patched
major 2
minor 3.1
year 2006
month 06
day 16
svn rev 38350
language R
version.string Version 2.3.1 Patched (2006-06-16 r38350)
G