[R] lattice multiple plots per page

Deepayan Sarkar deepayan at stat.wisc.edu
Tue Feb 15 17:20:07 CET 2005


On Monday 14 February 2005 18:12, Jeff Jorgensen wrote:
> Dear R-sters,
>
> I was wondering if anyone has encountered the following issues.  I've
> figured out how to get multiple levelplots [library(lattice)] on a
> single plot.  However, when I add text (adding axis labels for the
> entire four panel plot) the text is missing when I insert the *.eps
> file I've created into my LaTeX document (via MikTeX-WinEdt).  And,
> I've just upgraded to R v2.0.1 from v1.8.1 (Windows), and each
> individual levelplot is smaller compared to the older R release.
>
> Any clues as to 1) how I can recover the lost text, and 

Your use is incorrect, in the sense that the return value of 
grid.locator() is not a valid input of ltext. You could do the 
following to fix this, 

library(grid)
ltext(lapply(grid.locator(), convertX, "native", TRUE),
      lab="x-axis label, where I click",cex=1.5)
ltext(lapply(grid.locator(), convertX, "native", TRUE),
      lab = "y-axis label, where I click",
      cex=1.5, srt=90)

but that doesn't seem to help either. So, there seems to be a bug 
somewhere. However, you presumably want something like 


grid.text(x = .05, y = .5, lab="y-axis label", 
          default.units = "npc", gp = gpar(cex=1.5), 
          rot = 90)
grid.text(x = .5, y = .05, lab="x-axis label", 
          default.units = "npc", gp = gpar(cex=1.5))

for the last two steps, which seems to work. 


> 2) increase the size of each of the levelplots?

You need to change the following settings, in particular the entries 
that end with 'padding' (similarly for 'layout.heights').

> str(trellis.par.get("layout.widths"))
List of 13
 $ left.padding     : num 1
 $ key.left         : num 1
 $ key.ylab.padding : num 1
 $ ylab             : num 1
 $ ylab.axis.padding: num 1
 $ axis.left        : num 1
 $ axis.panel       : num 1
 $ panel            : num 1
 $ between          : num 1
 $ axis.right       : num 1
 $ axis.key.padding : num 1
 $ key.right        : num 1
 $ right.padding    : num 1

Deepayan

>
> Cheers,
>
> Jeff Jorgensen
>
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> Sample code that illustrates what I'm trying to do:
>
> #create a levelplot
> x<-seq(pi/4, 5*pi, length = 100)
> y<-seq(pi/4, 5*pi, length = 100)
> r<-as.vector(sqrt(outer(x^2, y^2, "+")))
> grid<-expand.grid(x=x, y=y)
> grid$z<-cos(r^2) * exp(-r/(pi^3))
> a<-levelplot(z~x*y, grid, cuts = 50, xlab="", ylab=",
>   colorkey = FALSE)
>
> #create the multiple panel plot, here using all the same levelplot
> trellis.par.set(list(background=list(col="white"))) #white background
> #using position to scale the plots up and to the right ~10%
> #to make room for the axis labels
> print(a,position=c(0.1,0.1,1,1),split=c(1,1,2,2),more=T)
> print(a,position=c(0.1,0.1,1,1),split=c(1,2,2,2),more=T)
> print(a,position=c(0.1,0.1,1,1),split=c(2,1,2,2),more=T)
> print(a,position=c(0.1,0.1,1,1),split=c(2,2,2,2),more=F)
> #commands that let you click where you want the labels centered
> ltext(grid::grid.locator(),lab="x-axis label, where I click",cex=1.5)
> ltext(grid::grid.locator(),lab="y-axis label, where I
> click",cex=1.5,srt=90) #save device to an *.eps file, to be called
> later by a \includegraphics command
> dev.copy2eps(file="twobytwoplot.eps")




More information about the R-help mailing list