Great! Thank you very much. I missed the old R-help post but indeed this too simple ... Boris.
________________________________ From: Dennis Murphy [mailto:djmu...@gmail.com] Sent: Thursday, 14, January, 2010 14:40 PM To: Vasiliev b...@cefcom h...@ottawa-hull Cc: r-h...@stat.math.ethz.ch Subject: Re: [R] lattice dotplot with missing levels in factor variable Based on an old R-help post, *http://tolstoy.newcastle.edu.au/R/e2/help/06/09/1579.html I managed to get the desired plot with the following call: dotplot(reorder(lvl, rsp) ~ rsp | cat, data = xx, type = c( 'h', 'p'), layout = c(1, 2), scales = list(y = list(relation = 'free', rot = 0)), prepanel = function(x, y, ...) { yy <- y[, drop = TRUE] list(ylim = levels(yy), yat = sort(unique(as.numeric(yy)))) }, panel = function(x, y, ...) { yy <- y[, drop = TRUE] panel.dotplot(x, yy, ...) } ) Trivial :) HTH, Dennis On Thu, Jan 14, 2010 at 10:53 AM, Dennis Murphy <djmu...@gmail.com> wrote: Hi: I can get you halfway there, but I haven't figured out yet how to get rid of the unused levels... dotplot(reorder(lvl, rsp) ~ rsp | cat, data = xx, type = c('h', 'p'), layout = c(1, 2)) I'll play with this for a few more minutes...if I get something, I'll let you know. HTH, Dennis On Thu, Jan 14, 2010 at 9:25 AM, <boris.vasil...@forces.gc.ca> wrote: 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. ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide *http://*www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code. [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.