Hi, I have tried your proposition, and it works properly on the simulated data, but not on my real data, and I do not see any explanations, this is weird, i have no more ideas to explore the problem
so here i give some information on my data, nothing special actually, Christophe > summary(sasdata03_a) jaar Cat_F montant_oa nombre_cas montant_i 2006:36854 a :22591 Min. : -112.8 Min. : -5.0 Min. : 33.22 2007:36538 h :22056 1st Qu.: 1465.5 1st Qu.: 104.0 1st Qu.: 37.80 2008:36579 i :21844 Median : 4251.5 Median : 307.0 Median : 50.00 k :21485 Mean : 13400.0 Mean : 557.5 Mean : 1172.17 g :16217 3rd Qu.: 13648.5 3rd Qu.: 748.0 3rd Qu.: 458.67 d : 5778 Max. : 534655.6 Max. :13492.0 Max. :17306.73 (Other): 0 nombre_i Min. : 1.00 1st Qu.: 1.00 Median : 5.00 Mean : 44.87 3rd Qu.: 29.00 Max. :689.00 > is.data.frame(sasdata03_a) [1] TRUE The code of the function: boxplot2.stats <- function (x, coef = 1.5, do.conf = TRUE, do.out = TRUE) { if (coef < 0) stop("'coef' must not be negative") nna <- !is.na(x) n <- sum(nna) stats <- stats::fivenum(x, na.rm = TRUE) stats[c(1,5)]<- quantile(x, probs=c(0.05, 0.95)) iqr <- diff(stats[c(2, 4)]) if (coef == 0) do.out <- FALSE else { out <- if (!is.na(iqr)) { x < (stats[2L] - coef * iqr) | x > (stats[4L] + coef * iqr) } else !is.finite(x) if (any(out[nna], na.rm = TRUE)) stats[c(1, 5)] <- range(x[!out], na.rm = TRUE) } conf <- if (do.conf) stats[3L] + c(-1.58, 1.58) * iqr/sqrt(n) list(stats = stats, n = n, conf = conf, out = if (do.out) x[out & nna] else numeric(0L)) } On Wed, Oct 13, 2010 at 5:13 PM, David Winsemius <dwinsem...@comcast.net>wrote: > > On Oct 13, 2010, at 10:05 AM, Christophe Bouffioux wrote: > > Dear R-community, >> >> Using bwplot, how can I put the whiskers at percentile 5 and percentile >> 95, >> in place of the default position coef=1.5?? >> >> Using panel=panel.bwstrip, whiskerpos=0.05, from the package agsemisc >> gives >> satisfaction, but changes the appearance of my boxplot and works with an >> old >> version of R, what I dont want, and I didnt find the option in >> box.umbrella parameters >> > > Nope, you won't find it even if you search harder, but you do have a > lattice path forward. Just as base function boxplot() does the calculations > and then plots with bxp(), by default panel.bwplot sends the data to > boxplot.stats, but panel.bwplot also allows you to specify an alternate > function that returns plotting parameters differently as long as those > conforms to the requirements for structure. You can look at boxplot.stats > (it's not that big) and then construct an alternative. The line you would > need to alter would be the one starting with: stats<-stats::fivenum(...), > since you are changing the values returned by fivenum(). You might get away > with just changing stats[1] and stats[5] to your revised specifications, > although it has occurred to me that you might get some of those "out" dots > inside your whiskers. (Fixing that would not be too hard once you are inside > boxplot.stats(). > > Seemed to work for me with your data (at least the extent of plotting a > nice 3 x 2 panel display. All I did was redefine an nboxplot.stats by > inserting this line after the line cited above: > > stats[c(1,5)]<- quantile(x, probs=c(0.05, 0.95)) > > and then added an argument ..., stats=nboxplot.stats) inside your > panel.bwplot. > > -- > David. > > > Many thanks >> Christophe >> >> Here is the code: >> >> library(lattice) >> ex <- data.frame(v1 = log(abs(rt(180, 3)) + 1), >> v2 = rep(c("2007", "2006", "2005"), 60), >> z = rep(c("a", "b", "c", "d", "e", "f"), e = 30)) >> >> ex2 <- data.frame(v1b = log(abs(rt(18, 3)) + 1), >> v2 = rep(c("2007", "2006", "2005"), 6), >> z = rep(c("a", "b", "c", "d", "e", "f"), e = 3)) >> ex3 <- merge(ex, ex2, by=c("v2","z")) >> D2007 <- ex3[ex3$z=="d" & ex3$v2==2007, ] >> D2006 <- ex3[ex3$z=="d" & ex3$v2==2006, ] >> C2007 <- ex3[ex3$z=="c" & ex3$v2==2007, ] >> > > > quantile(D2007$v1, probs = c(0.05, 0.95)) >> quantile(D2006$v1, probs = c(0.05, 0.95)) >> quantile(C2007$v1, probs = c(0.05, 0.95)) >> >> bwplot(v2 ~ v1 | z, data = ex3, layout=c(3,2), X = ex3$v1b, >> pch = "|", >> par.settings = list( >> plot.symbol = list(alpha = 1, col = "transparent",cex = 1,pch = 20)), >> panel = function(x, y, ..., X, subscripts){ >> panel.grid(v = -1, h = 0) >> panel.bwplot(x, y, ..., subscripts = subscripts) >> X <- X[subscripts] >> xmax =max(x) >> X <- tapply(X, y, unique) >> Y <- tapply(y, y, unique) >> tg <- table(y) >> panel.points(X, Y, cex=3, pch ="|" , col = "red") >> #vcount <- tapply(v1, v2, length) >> panel.text((xmax-0.2), (Y-0.15), labels = paste("N=", tg)) >> }) >> >> [[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<http://www.r-project.org/posting-guide.html> >> and provide commented, minimal, self-contained, reproducible code. >> > > David Winsemius, MD > West Hartford, CT > > [[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.