Matt Bannert Matt Bannert - 10 months ago 65
R Question

Can I get boxplot notches in ggplot2?

Yes, I know it's been around, I've also found Hadley's answer on google groups that there is no notches yet for

boxplots. So my question is twofold: Has this changed (there's a native implementation of notches already) and if not is there something one could do about it.

I mean I do not need the notch optic, representing the confidence bounds by some shaded area that is suitably placed in another layer over the boxplot, would look nice, too.

Also added a screenshot because I heard a graphics question is never complete without the graphic
enter image description here

Answer Source

Update In addition to the options detailed below, version 0.9.0 of ggplot2 includes this feature in geom_boxplot. Examining ?geom_boxplot reveals a notch and notchwidth argument:

+ geom_boxplot(notch = TRUE, notchwidth = 0.5)

Not elegant graphics but here is an example:

# confidence interval calculated by `boxplot.stats`
f <- function(x) {
    ans <- boxplot.stats(x)
    data.frame(ymin = ans$conf[1], ymax = ans$conf[2])

# overlay plot (upper panel below)
p <- ggplot(iris, aes(Species, Sepal.Length)) + geom_boxplot() +
  stat_summary( = f, geom = "linerange", colour = "skyblue", size = 5)

# base graphics (lower panel below)
boxplot(Sepal.Length ~ Species, data = iris, notch = TRUE)

you can change the apparence of CI bar by tweaking the arguments of stat_summary.

enter image description here enter image description here

crossbar version:

f <- function(x) {
  ans <- boxplot.stats(x)
  data.frame(ymin = ans$conf[1], ymax = ans$conf[2], y = ans$stats[3])

p <- ggplot(iris, aes(Species, Sepal.Length)) + 
  geom_boxplot(width = 0.8) +
  stat_summary( = f, geom = "crossbar", 
    colour = NA, fill = "skyblue", width = 0.8, alpha = 0.5)

enter image description here