[R] How to get correct proportions/bounding box for latex figure?

context grey mobygeek at yahoo.com
Wed Mar 15 02:28:16 CET 2006


Hello,

I recently posted a question about my troubles with
importing
a lattice/trellis figure into latex.  

To recap, 
The figure contains 3 scatterplots, so it should have
roughly a 1:3 sort
of aspect ratio, in order to make each of the
scatterplots square.  
Instead, the whole figure comes out roughly square, so
each scatterplot
is badly stretched.  I fixed this by adding aspect=1/1
to the individual 
xyplot() calls.  However, the bounding box as seen
from Latex is quite 
incorrect -  it appears that R and latex think the
figure has a square 
aspect ratio rather than the actual 1:3 ratio.

(The original post title was "postscript bounding box
in trellis/lattice plot is wrong ?", and was around 1
march.)

The recommended response appears to be to add the
additional arguments
  width=3.0, height=1.0, horizontal=FALSE,
onefile=FALSE, paper="special"
to the trellis.device(postscript...) call.

(The width/height arguments are required: without them
R gives an error
   "Error in grid.Call.graphics("L_setviewport", pvp,
TRUE) : 
          	Non-finite location and/or size for
viewport")


Fine, but how then do I know what width and height
are, and why should
I have to specify this?  Unless I get them in exactly
the right ratio,
the figures are going to be stretched (including the
fonts, which will
not look professional)!

So, I guess I could print out the figure and get out a
ruler and measure
(fortunately the scatterplots have boxes that I know
should be square,
so I could figure out the right ratio).

But this seems so antiquated, and makes me think I
must be overlooking
something.  R should be _telling me_ what the bounding
box is (rather
than making me estimate it).  R knows the bounding box
because it puts
down the ink (metaphorically)...  and if it did not
know, it would
display on-screen figures with incorrect centering and
clipping.

Thanks for any advice or insight.

.............

Here is a sketch of the code:

library(lattice)

    plt_hi[[1]] <- xyplot(thedat[,ir] ~ thedat[,ic],
       aspect=1/1)
...
    plt_hi[[2]] <- xyplot(thedat[,ir] ~ thedat[,ic],
       aspect=1/1)
...
    plt_hi[[2]] <- xyplot(thedat[,ir] ~ thedat[,ic],
       aspect=1/1)

# optionally add horizontal=FALSE, paper="special",
etc. here
trellis.device(postscript, file=thefile, color=F)
print(plt_hi[[1]], split=c(1,1,3,1), more=T)
print(plt_hi[[2]], split=c(2,1,3,1), more=T)
print(plt_hi[[3]], split=c(3,1,3,1), more=F)
dev.off()




More information about the R-help mailing list