geom_violin - wch/ggplot2 GitHub Wiki
I've added a new geom for violin plots. Here are some examples.
# Generate some data
set.seed(111)
dat <- data.frame(x=LETTERS[1:3], y=rnorm(90))
# Get rid of half the C entries (to illustrate scaling to sample size)
dat <- dat[ dat$x!="C" | c(T,F), ]
# Basic
ggplot(dat, aes(x=x, y=y)) + geom_violin()
# Narrower, with points overlaid
ggplot(dat, aes(x=x, y=y)) + geom_violin(width=.5) + geom_point(shape=21)
# With dotplot
ggplot(dat, aes(x=x, y=y)) + geom_violin() +
geom_dotplot(binwidth=.2, binaxis="y", stackdir="center")
# Scale area proportional to sample size
ggplot(dat, aes(x=x, y=y)) + geom_violin(scale="count") +
geom_dotplot(binwidth=.2, binaxis="y", binstataxis="y", stackdir="center")
# With tails and points
ggplot(dat, aes(x=x, y=y)) + geom_violin(trim=FALSE) + geom_point(shape=21)
# With tails, with smaller bandwidth using adjust
ggplot(dat, aes(x=x, y=y)) + geom_violin(adjust=.3, trim=FALSE) + geom_point(shape=21)
# Dodging
ggplot(dat, aes(x="foo", y=y, fill=x)) + geom_violin()
# With box plot
ggplot(dat, aes(x=x, y=y)) + geom_violin() +
geom_boxplot(width=.1, outlier.size=0, fill="grey50") +
stat_summary(fun.y=median, geom="point", fill="white", shape=21, size=4)
# Dodging with boxplot overlay
# mapping group=x is necessary for dodging to work for boxplots and points
pd <- position_dodge(0.9)
ggplot(dat, aes(x="foo", group=x, y=y)) +
geom_violin(aes(fill=x), position=pd) +
geom_boxplot(width=.1, outlier.size=0, fill="grey50", position=pd) +
stat_summary(fun.y=median, geom="point", fill="white", shape=21, size=4, position=pd)
# Median (black) and mean (white) points
ggplot(dat, aes(x=x, y=y)) + geom_violin() +
stat_summary(fun.y=median, geom="point", fill="black", shape=21, size=5) +
stat_summary(fun.y=mean, geom="point", fill="white", shape=23, size=3)