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 don’t want, and I didn’t 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
and provide commented, minimal, self-contained, reproducible code.
David Winsemius, MD
West Hartford, CT