I present code for a stacked graph with common axes only for panels of the same row and with axis titles at different sides. This admittedly took me days (because i had not much of a clue how to use lattice), but eventually I did it and maybe someone can use this for his/her own purpose:
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(right.padding = 10,
left.padding = 8))
PanFun<-function(...){
panel.dotplot(...)
if(is.element(panel.number(),1:2))
{at<-pretty(c(min(y1),max(y1)))
panel.axis("right",at = at,outside = T,
labels = F,half = F)}
if(panel.number() == 3)
{at<-pretty(c(min(y1),max(y1)))
panel.axis("right",at = at,outside = T,
labels = T,half = F)}
if(panel.number() == 4)
{at<-pretty(c(min(y2),max(y2)))
panel.axis("left",at = at,outside = T,
labels = T,half = F)}
if(is.element(panel.number(),5:6))
{at<-pretty(c(min(y2),max(y2)))
panel.axis("left",at = at,outside = T,
labels = F,half = F)}}
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 = list("response one (y1)", y = 0.75, x = -4),
ylab.right = list("response two (y2)", y = 0.25,
rot = 270, x = 4),
xlab = c("Site 1", "Site 2","Site 3"),
strip = FALSE, panel=PanFun)
Thanks a lot
ReplyDeleteSee also http://latticeextra.r-forge.r-project.org/#combineLimits&theme=default
ReplyDeleteI just discovered that I have re-invented the wheel at least twice this month now that I've read through the contents of that package more thoroughly.