Variation
'plot.ci95.whisker' <- function( points.x = x, points.y = y, distribution = "t", #"normal" y.limits = NULL, ci95.ghost = 1, whiskers.and.outliers = FALSE ){ cat("\nPlotting 95% Confidence Interval\n") if(is.null(y.limits)) stop("\n\n\ty.limits was not supplied\n\n") y.split <- split(points.y,points.x) x.locations <- as.numeric(names(y.split)) for( i in x.locations){ x <- i y <- y.split[[as.character(x)]] a <- mean(y) s <- sd(y) n <- length(y) if(distribution == "t") error <- qt(0.975,df=n-1)*s/sqrt(n) if(distribution == "normal") error <- qnorm(0.975)*s/sqrt(n) top.ci <- a + error bot.ci <- a - error ### Plot Lower Interval lsegments( x0 = x, # X Start y0 = bot.ci, #Y Start x1 = x, # X Finish y1 = min(a,c(a - 0.02*diff(y.limits))), # Y Finish, with 2% buffer away from center point (creates white space) col = "black", lty = 1, lwd = 8, alpha = .25 ) ### Plot Upper Interval lsegments( x0 = x, y0 = top.ci, x1 = x, y1 = max(a,c(a + 0.02*diff(y.limits))), col = "black", lty = 1, lwd = 8, alpha = .25 ) ### Plot Mean Dot lpoints( x = x, y = a, pch = 16, # Solid Circle col = "black", cex = .75, alpha = ci95.ghost ) ### Write how many points there are at the bottom ltext( x = x, y = c(y.limits[1]-diff(y.limits)*0), # To have the text written in the 3% buffer offset = 0, labels = c(paste("N =",n,sep=" ",collapse="")), cex = .5, srt = 90, # Rotate text 90 degrees ) ### Make Box Plot Box Color Transparent box.rectangle <- trellis.par.get("box.rectangle") box.rectangle$col <- "transparent" trellis.par.set("box.rectangle", box.rectangle) ### Make Box Plot Outliers Circles outlier.color <- "black" plot.symbol <- trellis.par.get("plot.symbol") plot.symbol$col <- outlier.color plot.symbol$cex <- 1 trellis.par.set("plot.symbol", plot.symbol) ### Make Box Plot Whiskers Black, Solid, and See Through whisker.color <- "black" box.umbrella <- trellis.par.get("box.umbrella") box.umbrella$alpha <- ci95.ghost box.umbrella$col <- whisker.color box.umbrella$lty <- "solid" trellis.par.set("box.umbrella", box.umbrella) ### Make Whiskers and Outliers if(whiskers.and.outliers){ panel.bwplot( x = rep(x,length(y)), y = y, horizontal = FALSE, color = "white", ### Best way known how to remove the dot pch=".", ### Best way known how to remove the dot cex = 0.000001, ### Best way known how to remove the dot fill = "transparent", # Makes box see-through box.width = 0 # Makes whisker top line disappear ) } #cat("\n\n\nX");print(x) #cat("a");print(a) #cat("s");print(s) #cat("n");print(n) #cat("error");print(error) #cat("top.ci");print(top.ci) #cat("bot.ci");print(bot.ci) #cat("diff");print(0.02*diff(y.limits)) } }
key = list( title = "Legend", text = list( c("Points"), col="black" ), points = list( col = c("black"), pch = c(4), cex = c(1)*0.75 ), lines = list( col = c("black"), lwd = c(1)*0.75, lty = c("blank") ), type = "l", space = "right", cex.title = 1, cex = 0.75 )