[R] lattice: plot alignment fails

Marius Hofert m_hofert at web.de
Tue Aug 24 20:39:49 CEST 2010


Dear expeRts,

I would like to have four plots appearing in one figure. The minimal example shows this. However, the four figures are not properly aligned. Why? If I comment out the scales=... arguments, then it works, but I would like to use this... :-)

Cheers,

Marius



library(lattice)
set.seed(1)

## plot: xyplot, histogram, qqplot, acf
res.plots <- function(x){
    
    x.max <- max(abs(min(x)),abs(max(x)))

    ## xyplot
    x0 <- 1
    x1 <- length(x)
    y0 <- -x.max
    y1 <- x.max
    xy <- xyplot(x~(1:length(x)),xlim=c(x0,x1),ylim=c(y0,y1),
                 aspect=1,scales=list(relation="free",alternating=c(1,1),tck=c(1,0)))
    
    ## histogram
    x0 <- -x.max
    x1 <- x.max
    h <- histogram(x,xlim=c(x0,x1),aspect=1,type="density",
                   scales=list(relation="free",alternating=c(1,1),tck=c(1,0)))

    ## qqplot
    y0 <- -x.max
    y1 <- x.max
    qq <- qqmath(x,ylim=c(y0,y1),aspect=1,scales=list(tck=c(1,0),y=list(rot=90)),
                 panel=function(...){
                     panel.qqmath(...)
                     panel.qqmathline(x)
                 })

    ## ACF
    myacf <- acf(x,plot=F,lag.max=24)
    x0=0
    x1=24
    y0=-1
    y1=1
    ACF <- xyplot(0~0,xlim=c(x0,x1),ylim=c(y0,y1),aspect=1,	
                  scales=list(tck=c(1,0),y=list(rot=90)),
                  panel=function(...){
                      for(i in 1:24){
                          panel.segments(i,0,i,myacf$acf[i])
                      }
                      panel.abline(h=0)
                  })
    
    ## plot function
    plot.list <- list(xy,qq,h,ACF) 
    counter <- 1
    trellis.device(pdf,paper="special",width=6,height=6,file="myplot.pdf")
    for(i in 1:2){
        for(j in 1:2){            
            if(i==2 && j==2) print(plot.list[[counter]], split=c(j,i,2,2))
            else print(plot.list[[counter]], split=c(j,i,2,2), more=TRUE)
            counter <- counter + 1
        }
    }
    dev.off()

}


x <- rexp(1000)
res.plots(x)



More information about the R-help mailing list