# I have some population estimates and confidence intervals for various size classes
# of animals captured with two gear types. I'd like to plot the estimates along with # the 90 and 95% CI's by size class for each gear type. # The data can be read in as: estimates <- c(67.42,30.49,32.95,23.53,10.26,6.03,23.53,0.93,50.72,24.2,25.84,18.54, 7.16,3.6,9.35,0.33,87.28,37.25,40.16,28.59,13.77,8.92,40.74,1.68,48.28,2 3.09, 24.49,17.7,6.63,3.28,7.79,0.26,91.63,38.74,41.6,29.74,14.49,9.51,44.16,1 .88) estimates.m<- matrix(estimates, 8,5) colnames(estimates.m) <- list("est","lci90","uci90","lci95","uci95") id <- c(1,1,2,2,3,3,4,4) size <- c("All","All","Large","Large","Medium","Medium","Small","Small") gear <- rep(c("Camera","Dredge"),4) cds.est <- data.frame(id,size,gear,estimates.m) # The following script works fine for plotting one size class at a time using dotplot() and is how I # would like the plots to look library(lattice) dat1 <- cds.est[cds.est$id == 1,] dotplot(gear ~ est , data=dat1, xlim = c(min(dat1$lci95 -10), max(dat1$uci95 +10)), xlab='Density (num / Nmi^2)', main = as.vector(unique(dat1$size)), panel=function(x,y) { panel.xyplot(x,y,pch=16,cex=1) panel.segments(dat1$lci95,as.numeric(y),dat1$uci95,as.numeric(y), lty=1, col=1) panel.segments(dat1$lci90,as.numeric(y),dat1$uci90,as.numeric(y), lty=1, lwd=4, col='grey60') panel.xyplot(x,y,pch=16,cex=1.2,col='white') panel.xyplot(x,y,pch=1,cex=1.1, col='black') }) # Since I have multiple size classes and will producing similar plots for other data sets # I've written the following script using a loop. The script loops over the "id" variable in the # cds.est data frame and stores the plots in a list. Since dotplot() is part of the # lattice package, I used grid.arrange to tile the plots. library(grid) library(gridExtra) id2 <- 1:max(cds.est$id) plots <- vector("list", length(id2)) j <- 0 for (i in id2) { dat <- cds.est[cds.est$id == i,] plots[[ j <- j+1]] <- dotplot(gear ~ est , data=dat, xlim = c(min(dat$lci95 -10), max(dat$uci95 +10)), xlab='Density (num / Nmi^2)', main = as.vector(unique(dat$size)), panel=function(x,y) { panel.xyplot(x,y,pch=16,cex=1) panel.segments(dat$lci95,as.numeric(y),dat$uci95,as.numeric(y), lty=1, col=1) panel.segments(dat$lci90,as.numeric(y),dat$uci90,as.numeric(y), lty=1, lwd=4, col='grey60') panel.xyplot(x,y,pch=16,cex=1.2,col='white') panel.xyplot(x,y,pch=1,cex=1.1, col='black') }) } do.call(grid.arrange, plots) # The script runs and produces all the plots with the correct estimates, but the CI's are not # plotting correctly. Does anyone have suggestions on what is causing this? Thanks, Mike [[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.