[R] aligning column of xyplots and removing space between them

Deepayan Sarkar deepayan.sarkar at gmail.com
Tue Oct 11 22:42:31 CEST 2005


On 10/11/05, Gabor Grothendieck <ggrothendieck at gmail.com> wrote:
> The code below displays three graphs in three rows and one column but:
>
> 1. I want to remove the space between the graphs (I tried playing with position=
> arg to print.trellis but it seems quite difficult to get the right
> values and all
> my attempts had space between them or had overlapping graphs.  Is
> there a better way to do this?

Define

theme.novpadding <- list(layout.heights =
    list(top.padding = 0,
         main.key.padding = 0,
         key.axis.padding = 0,
         axis.xlab.padding = 0,
         xlab.key.padding = 0,
         key.sub.padding = 0,
         bottom.padding = 0))

and then add

par.settings = theme.novpadding

to all your xyplot calls.

> 2. the widths of the plots are not the same even though I specified the same
> xlim= to them all.  How do I make them the same?

They seem to be the same for me, but they might be different if the
y-axis labels are different. See the 'panel.width' argument in
?print.trellis.


> 3. how do I get rid of the ticks at the top of the bottom plot?

add

scales = list(x = list(relation = "free"))

> 4. the bottom graph is supposed to plot 1:3 against itself but the third
> point is not showing even though I specified ylim = c(0,3).  Must
> I specify ylim = c(0,3+1) or is there a better way?

There's no better way. This behaviour is intentionally different from
base graphics.

Here's a modified version of the last part of your code:

grid.newpage()

# n and nr are number of cells and rows
n <- nr <- 3
nc <- 1  # must be 1

heights <- unit(c(2, rep(1, nr-1)), "null")
downViewport(pushLayout(nr, nc, heights = heights))

vpt <- current.vpTree(all = FALSE)

### relevant part starts here
#########################

xlab <- main <- function(x) if (x) "v"
for(k in 1:n) with(vpt$children[[k]],
       print( xyplot(v ~ v, list(v = 1:k), xlab = xlab(k == n),
       xlim = c(0,n), ylim = c(0,n), main = main(k == 1),
       par.settings = theme.novpadding,
       scales = list(x = list(draw = k == n, relation = "free", c(1, 0)),
                         y = list(alternating = 3))),
       newpage = FALSE, panel.width = list(x = 4, units = "inches"))
)

-Deepayan




More information about the R-help mailing list