Paul, On Wed, Aug 6, 2008 at 1:40 PM, Paul Murrell <[EMAIL PROTECTED]> wrote: >> I'm trying to write a function that produces a main plotting region >> with several square plots along the right side. Ideally the size of >> right side plots will scale only with the height of the entire plot, >> yet never overlap with another secondary plot. The following two >> snippets get close, however, as I resize the plot horizontally the >> right side plots (green squares) get smaller whereas I'd like them to >> remain the same size. It seems the answer lies in setting the layout >> width for the side plot column in a clever way that I haven't been >> able to discover. Any suggestions on how to achieve that effect or >> other improvements to the below code are most welcome. >> >> Hopefully, my explanation makes my goal clear. Also note, the real >> application is a function that will have arbitrary numbers of side >> plots.
> Sorry, I'm not completely sure what you want to end up with, but do > either of the following come close ? Thanks for the response. Of the two suggestions the latter is close to what I was hoping four. However, ideally there would be no gap between the side plots when the plot is 'tall'. Phrased another way, as the total plot gets larger, I would like the second column of the lay1 to take up a greater proportion of the figure. So that a resize in the Y, changes the allocation of column space in the X. I don't suppose that is possible, is it? Cheers Peter > # Side plots square and attached to each other > # With "tall" plot, get gaps top and bottom > # With "wide" plot, get gap on the right > lay1 <- grid.layout(1, 2, widths=c(10, 1)) > lay2 <- grid.layout(10, 1, respect=TRUE, just="left") > > # grid.newpage() > pushViewport(viewport(width=.8, height=.8, layout=lay1)) > grid.rect(gp=gpar(col="grey")) > > pushViewport(viewport(layout.pos.col=1)) > grid.rect(gp=gpar(fill="grey")) > popViewport() > > pushViewport(viewport(layout.pos.col=2, > layout=lay2)) > for (i in 1:10) { > pushViewport(viewport(layout.pos.row=i)) > grid.rect(gp=gpar(fill="light grey")) > popViewport() > } > popViewport() > > > # Side plots square and separate from each other > # With "tall" plot, get gaps between vertically > # With "wide" plot, get gap on the right > lay1 <- grid.layout(10, 2, widths=c(10, 1)) > > # grid.newpage() > pushViewport(viewport(width=.8, height=.8, layout=lay1)) > grid.rect(gp=gpar(col="grey")) > > pushViewport(viewport(layout.pos.col=1)) > grid.rect(gp=gpar(fill="grey")) > popViewport() > > for (i in 1:10) { > pushViewport(viewport(layout.pos.col=2, > layout.pos.row=i)) > pushViewport(viewport(x=0, width=unit(1, "snpc"), > height=unit(1, "snpc"), just="left")) > grid.rect(gp=gpar(fill="light grey")) > popViewport(2) > } > > Paul > ______________________________________________ R-help@r-project.org 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.