[R] lattice dotplot with missing levels in factor variable

Boris.Vasiliev at forces.gc.ca Boris.Vasiliev at forces.gc.ca
Thu Jan 14 18:25:43 CET 2010

```Hi,

I am trying to create a dotplot where each panel shows levels vs.
responses; the levels are sorted by responses but levels vary from one
panel to another.  However, I run into problems with controlling the
y-limits and y-labels.

In particular, suppose I have a data frame

rsp <- c(10,2,4,0,2,3)
lvl <-
factor(c("L1","L2","L3","L2","L3","L4"),levels=c("L1","L2","L3","L4"))
cat <- factor(c("A","A","A","B","B","B"),levels=c("A","B"))
xx <- data.frame(cat,lvl,rsp)
print(xx)

cat lvl rsp
1   A  L1  10
2   A  L2   2
3   A  L3   4
4   B  L2   0
5   B  L3   2
6   B  L4   3

I tried to follow the "Lattice ..." book and used

dotplot(lvl~rsp|cat,data=xx,type=c("h","p"),
panel=function(x,y,...){y1 <- reorder(y,x)
y1 <- y1[,drop=TRUE]
panel.dotplot(x,y1,...)},
prepanel=function(x,y){y1 <- reorder(y,x)
y1 <- y1[,drop=TRUE]
return(list(ylim=levels(y1)))},
layout=c(1,2))

However, the resulting has incorrect y-labels:

Desired Plot      Achieved Plot

Panel B:          Panel B:

L4
L4 ----o          L1 ----o
L3 ---o           L3 ---o
L2 o              L3 o

panel A:          Panel A:

L4
L1 ----------o    L1 ----------o
L3 ----o          L3 ----o
L2 --o            L2 --o

It appears that the y-limits and y-labels specified by the pre-panel
function are overwritten by something in dotplot.  Can anybody suggest
what I am doing incorrectly?

Regards,
Boris.

```