boxplot
function, and may be apparent with small samples.
See boxplot.stats
for for more information on how hinge
positions are calculated for boxplot
.geom_boxplot(mapping = NULL, data = NULL, stat = "boxplot",
position = "dodge", outlier.colour = NULL, outlier.shape = NULL,
outlier.size = NULL, notch = FALSE, notchwidth = 0.5,
varwidth = FALSE, ...)
aes
or aes_string
. Only needs to be set
at the layer level if you are overriding the plot defaults.FALSE
(default) make a standard box plot. If
TRUE
, make a notched box plot. Notches are used to compare groups;
if the notches of two boxes do not overlap, this is strong evidence that
the medians differ.FALSE
(default) make a standard box plot. If
TRUE
, boxes are drawn with widths proportional to the
square-roots of the number of observations in the groups (possibly
weighted, using the weight
aesthetic).p + geom_boxplot() qplot(factor(cyl), mpg, data = mtcars, geom = "boxplot")
p + geom_boxplot() + geom_jitter() p + geom_boxplot() + coord_flip() qplot(factor(cyl), mpg, data = mtcars, geom = "boxplot") + coord_flip()
p + geom_boxplot(notch = TRUE) p + geom_boxplot(notch = TRUE, notchwidth = .3)
p + geom_boxplot(outlier.colour = "green", outlier.size = 3)
# Add aesthetic mappings # Note that boxplots are automatically dodged when any aesthetic is # a factor p + geom_boxplot(aes(fill = cyl)) p + geom_boxplot(aes(fill = factor(cyl))) p + geom_boxplot(aes(fill = factor(vs))) p + geom_boxplot(aes(fill = factor(am)))
# Set aesthetics to fixed value p + geom_boxplot(fill = "grey80", colour = "#3366FF") qplot(factor(cyl), mpg, data = mtcars, geom = "boxplot", colour = I("#3366FF"))
# Scales vs. coordinate transforms ------- # Scale transformations occur before the boxplot statistics are computed. # Coordinate transformations occur afterwards. Observe the effect on the # number of outliers. library(plyr) # to access round_any m <- ggplot(movies, aes(y = votes, x = rating, group = round_any(rating, 0.5))) m + geom_boxplot() m + geom_boxplot() + scale_y_log10() m + geom_boxplot() + coord_trans(y = "log10") m + geom_boxplot() + scale_y_log10() + coord_trans(y = "log10")
# Boxplots with continuous x: # Use the group aesthetic to group observations in boxplots qplot(year, budget, data = movies, geom = "boxplot") qplot(year, budget, data = movies, geom = "boxplot", group = round_any(year, 10, floor))
# Using precomputed statistics # generate sample data abc <- adply(matrix(rnorm(100), ncol = 5), 2, quantile, c(0, .25, .5, .75, 1)) b <- ggplot(abc, aes(x = X1, ymin = `0%`, lower = `25%`, middle = `50%`, upper = `75%`, ymax = `100%`)) b + geom_boxplot(stat = "identity") b + geom_boxplot(stat = "identity") + coord_flip() b + geom_boxplot(aes(fill = X1), stat = "identity")
# Using varwidth p + geom_boxplot(varwidth = TRUE) qplot(factor(cyl), mpg, data = mtcars, geom = "boxplot", varwidth = TRUE)
# Update the defaults for the outliers by changing the defaults for geom_point
p <- ggplot(mtcars, aes(factor(cyl), mpg)) p + geom_boxplot()
update_geom_defaults("point", list(shape = 1, colour = "red", size = 5)) p + geom_boxplot()
stat_quantile
to view quantiles conditioned on a
continuous variable, geom_jitter
for another way to look
at conditional distributions"In a notched box plot, the notches extend 1.58 * IQR / sqrt(n)
.
This gives a roughly 95See McGill et al. (1978) for more details.