Dear all, I'm trying to get a series of lattice levelplots to appear in viewports in a particular way but struggling to exert fine control over their appearence. There are two conditions: (a) I only want the levelplot to appear (I don't want axes, colour key, etc) in the viewport and (b) I want the levelplot to expand to the maximum allowable space in the viewport while observing the aspect ratio of the plot.
Condition (a) is OK, but (b) is giving me trouble. A toy example is: library(lattice) library(grid) x <- 1:10 y <- 1:10 grid <- expand.grid(x=x, y=y) grid$z <- grid$x*grid$y asp.ratio.1 <- 2 asp.ratio.2 <- .5 asp.ratio.3 <- 1 test.1 <- levelplot(z~x*y, grid, cuts = 5, xlab="", axes = FALSE, aspect = asp.ratio.1, ylab="", main='', sub="", colorkey = FALSE, region = TRUE, scales = list(draw = FALSE)) test.2 <- levelplot(z~x*y, grid, cuts = 5, xlab="", axes = FALSE, aspect = asp.ratio.2, ylab="", main='', sub="", colorkey = FALSE, region = TRUE, scales = list(draw = FALSE)) test.3 <- levelplot(z~x*y, grid, cuts = 5, xlab="", axes = FALSE, aspect = asp.ratio.3, ylab="", main='', sub="", colorkey = FALSE, region = TRUE, scales = list(draw = FALSE)) # so the three basic types of plot I will have toy.vp <- viewport(width = .8, height = .8, just = 'centre', name = 'toy') # this is for my levelplot X11() pushViewport(toy.vp) grid.rect(gp = gpar(col = 'grey')) print(test.1, newpage = FALSE) X11() pushViewport(toy.vp) grid.rect(gp = gpar(col = 'grey')) print(test.2, newpage = FALSE) X11() pushViewport(toy.vp) grid.rect(gp = gpar(col = 'grey')) print(test.3, newpage = FALSE) I want to get rid of the space (margins) around the longest axis for each variety of levelplot. So I tried to capture the viewport height and width and print the levelplot within a region which reflects the aspect ratio of the plot. I run into an error message as below: width.vp <- convertWidth(grobWidth(grid.rect()), 'cm') height.vp <- convertWidth(grobHeight(grid.rect()), 'cm') width.vp;height.vp # this works if(asp.ratio.1 < 1) {height.vp <- unit(as.numeric(height.vp)*asp.ratio.1, "cm")} if(asp.ratio.1 > 1) {width.vp <- unit(as.numeric(width.vp)/asp.ratio.1, "cm")} width.vp;height.vp # this also work (ie returns expected results) print(test.1, panel.width = list(width.vp), panel.height=list(height.vp)) the above command returns this error message: Error in Ops.unit(panel.height[[1]], panel.width[[1]]) : Operator '/' not meaningful for units What have I missed? Thanks in advance, MT ------------------------------------------------------------ Dr Michael Townsley Senior Research Fellow Jill Dando Institute of Crime Science University College London Second Floor, Brook House London, WC1E 7HN Phone: 020 7679 0820 Fax: 020 7679 0828 Email: [EMAIL PROTECTED] ______________________________________________ R-help@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 and provide commented, minimal, self-contained, reproducible code.