context grey
2006-Mar-15 01:28 UTC
[R] How to get correct proportions/bounding box for latex figure?
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()
Duncan Murdoch
2006-Mar-15 01:44 UTC
[R] How to get correct proportions/bounding box for latex figure?
context grey wrote:> 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.You say you want a nonstandard layout, then you say you shouldn't have to tell R what you want. How else would it know? Regarding the stretching: that's being done by whatever software is importing the picture. Just tell it to preserve the aspect ratio, and things will be fine. R writes the bounding box into EPS files, and reasonable software should be able to read it from there. Duncan Murdoch> > 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() > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html