[R] lattice help required

Kay Cichini Kay.Cichini at uibk.ac.at
Tue Aug 31 22:40:20 CEST 2010


...after digging for a while now, i came to a solution which may be crude,
but it works perfectly well.
if someone would advise me how to use textGrob avoiding the "\n" in the
title, combined with the linewidth = 4 in gpar(), to put the axis title into
the right place i'd be very glad!

maybe there is a better way to do it with latticeExtra (doubleYScale()?,..)
but i could not find one. 

library(lattice)

y1 <- rnorm(120,100,10)
y2 <- rnorm(120,10,1)
facs<-expand.grid(Sites=rep(c("Site I","Site II","Site
III"),20),Treatment=c("A","B"))

trellis.par.set(clip=list(panel="off",strip="off"),
                layout.widths=list(ylab.axis.padding=0))      ### adjusts
same space to both sides of device

PanFun<-function(...){
			    panel.dotplot(...)
			    if(is.element(panel.number(),1:2))
 					{at<-pretty(range(y1))
                               panel.axis("right",at=at,outside=T,
                               labels = F,half=F)}
	   		    if(panel.number() == 3)
 					{at<-pretty(range(y1))
                               panel.axis("right",at=at,outside=T,
                               labels = T,half=F)}                  
			    if(panel.number() == 4)
 					{at<-pretty(range(y2))
                               panel.axis("left",at=at,outside=T,
                               labels = T,half=F)}                  
			    if(is.element(panel.number(),5:6))
 					{at<-pretty(range(y2))
                               panel.axis("left",at=at,outside=T,
                               labels = F,half=F)}
			    }

library(grid)

g1<-textGrob("\ny1 response naxis title", x = unit(0.5, "npc"), y =
unit(0.25,"npc"),         ### crude1
         just = "centre", hjust = NULL, vjust = 0, rot = 270,
         check.overlap = FALSE, default.units = "npc",
         name = NULL, gp = gpar(lineheight=4), vp = NULL)                                           
### crude2

g2<-textGrob("\ny2 response axis title", x = unit(0.5, "npc"), y =
unit(0.75,"npc"),
         just = "centre", hjust = NULL, vjust = 0, rot = 90,
         check.overlap = FALSE, default.units = "npc",
         name = NULL, gp = gpar(lineheight=4), vp = NULL)

dotplot(y1+y2 ~ Treatment|Sites,
        outer=TRUE,data=facs,
        scales = list(
	    x = list(rot = 0, tck=c(1,0)),
          y = list(draw=F,relation="free",
          limits=list(range(y1),range(y1),range(y1),
                      range(y2),range(y2),range(y2)))),
        ylab=NULL,xlab=c("Site 1", "Site 2","Site 3"),
        strip=FALSE, panel=PanFun,
        legend =
        list(right = list(fun = g1),
             left = list(fun = g2)))
 

quote original:

... i added relation="free" to account for diffferent ranges of y1 and y2:

dotplot(y1+y2 ~ facs$Treatment|facs$Sites,
         outer=TRUE,
         scales = list(y = list(relation="free"), x = list(rot = 90,
tck=c(1,0))),
         ylab=c("y1", "y2"),
         xlab=c("Site 1", "Site 2"),
         strip=FALSE)  

but then i get four different y-lims.
more suited there should be only two - one for each response.
can someone tell me how i have to change the code?

best,
kay



> Kay,
>
> doe this do what you want?
>
>
> dotplot(y1+y2 ~ facs$Treatment|facs$Sites,
>         outer=TRUE,
>         scales = list(x = list(rot = 90, tck=c(1,0))),
>         ylab=c("y1", "y2"),
>         xlab=c("Site 1", "Site 2"),
>         strip=FALSE)
>
>
> On Wed, Aug 25, 2010 at 11:04 AM, Kay Cichini
> <Kay.Cichini at uibk.ac.at>wrote:
>
>>
>> hello,
>>
>> i want to stack two lattice plots beneath each other using one x-axis and
>> sharing the same text-panels,
>> like:
>> #####################################################################
>> library(lattice)
>>
>> y1 <- rnorm(100,100,10)
>> y2 <- rnorm(100,10,1)
>> facs<-expand.grid(Sites=rep(c("Site I","Site
>> II"),25),Treatment=c("A","B"))
>> pl1<-dotplot(y1 ~ facs$Treatment|facs$Sites,
>>             scales = list(x = list(rot = 90, tck=c(1,0))))
>> pl2<-dotplot(y2 ~ facs$Treatment|facs$Sites,
>>             scales = list(x = list(rot = 90, tck=c(1,0))))
>>
>> print(pl1, split=c(1,2,1,2), more=TRUE)
>> print(pl2, split=c(1,1,1,2))
>> #####################################################################
>>
>> but as said, ideally the plots should be stacked with only the lower plot
>> giving the x-axis annotation
>> and only the upper plot with text-panels.
>>
>> thanks a lot,
>> kay
>>
>> -----
>> ------------------------
>> Kay Cichini
>> Postgraduate student
>> Institute of Botany
>> Univ. of Innsbruck
>> ------------------------ 

-----
------------------------
Kay Cichini
Postgraduate student
Institute of Botany
Univ. of Innsbruck
------------------------

-- 
View this message in context: http://r.789695.n4.nabble.com/lattice-help-required-tp2338382p2402285.html
Sent from the R help mailing list archive at Nabble.com.



More information about the R-help mailing list