[R] Help with lattice graphics

ravi rv15i at yahoo.se
Mon Dec 1 19:30:41 CET 2008


Hi,
I like the formatting and the appearance of lattice plots. But I have not succeeded in gettting the right format in my plots with the lattice package in one of my applications. In the code shown below, I start by constructing a general data frame and show my attempts with the lattice package commands. After that, I use the graphics package and show the kind of plot that I want to get.

I would like to know how the lattice commands can be modified to get the final plot that I have obtained with the graphics package. Any explanatory comments to understand better the modifications are most welcome.

Here is my code :
##########################################################
rm(list=ls())
# make up a test data frame with 4 columns
# factors in first 3 cols and a numeric in the 4th
vec_a<-paste("A",1:4,sep=(''));na<-length(vec_a)
vec_b<-paste("B",1:5,sep=(''));nb<-length(vec_b)
yr<-c("2007","2008","2009");ny<-length(yr)
fac_a<-factor(vec_a);fac_b<-factor(vec_b);fac_yr<-factor(yr)
n<-na*nb*ny
# y is the response variable
y<-runif(n);y<-round(y,digits=1)
dfa<-rep(fac_a,times=nb*ny)
dfb<-rep(fac_b,each=na,times=ny)
dfyr<-rep(fac_yr,each=na*nb)
dataf<-data.frame(dfa=dfa,dfb=dfb,dfyr=dfyr,y=y);head(dataf)
# dataf is the test data frame
# First test with the lattice package
library(lattice)
barchart(y~dfb|dfyr,dataf,layout=c(3,1),beside=FALSE,
          groups=dfa,
          scales=list(x=list(rot=90)),
          par.settings=list(axis.text=list(font=2,cex=0.75),
                              par.ylab.text=list(font=2,cex=1.0),
                              par.xlab.text=list(font=2,cex=1.0),
                              par.main.text=list(font=2,cex=1.0)),
          xlab="b",
          ylab="y",
          main="A test lattice plot")
## lattice code doesn't give the desired plot
## Next try with the graphics package
## Seems to be easier to get the desired plot
##First, some preprocessing of data
df2007<-dataf[dfyr==2007,];df2008<-dataf[dfyr==2008,];df2009<-dataf[dfyr==2009,];
y2007<-matrix(df2007$y,ncol=nb,nrow=na)
y2008<-matrix(df2008$y,ncol=nb,nrow=na)
y2009<-matrix(df2009$y,ncol=nb,nrow=na)
colnames(y2007)<-vec_b;colnames(y2008)<-vec_b;colnames(y2009)<-vec_b;
rownames(y2007)<-vec_a;rownames(y2008)<-vec_a;rownames(y2009)<-vec_a;
ysmax<-ceiling(max(colSums(y2007),colSums(y2008),colSums(y2009)))+1
## Now, let's plot
#### the combination of plots desired as a lattice plot
col_choice=c("blue", "brown","lightgreen", "mistyrose")
par(mfrow=c(1,3),mar=c(5,5,5,2))
barplot(y2007,col = col_choice,
      beside=F,xlab="fac_b",ylab="y",main="year 2007",
      font.axis=2,font.lab=2,cex.lab=1.5,cex.axis=1.2,ylim=c(0,ysmax))
legend(x=1,y=ysmax,legend=vec_a,fill = col_choice)
barplot(y2008,col = col_choice,
      beside=F,xlab="fac_b",main="year 2008",
      font.axis=2,font.lab=2,cex.lab=1.5,cex.axis=1.2,ylim=c(0,ysmax))
barplot(y2009,col =col_choice,
      beside=F,xlab="fac_b",main="year 2009",
      font.axis=2,font.lab=2,cex.lab=1.5,cex.axis=1.2,ylim=c(0,ysmax))
par(mfrow=c(1,1))
## Can we get the same plot with the lattice package?
## I would like to have the legend on the top in one row
##########################################################

Thanking You,
Ravi



More information about the R-help mailing list