Bangyou - 3 months ago 73
R Question

# Add number of observations per group in ggplot2 boxplot

Following this question: How to add a number of observations per group and use group mean in ggplot2 boxplot?, I want to add number of observations per group in ggplot boxplot too. But I have added a colour into aes mapping.

The existing answer shows how to adjust text position in y axis. How could I adjust the text position in the x axis?

This is a minimum example to reproduce my problem:

``````library(ggplot2)

give.n <- function(x){
return(c(y = median(x)*1.05, label = length(x)))
# experiment with the multiplier to find the perfect position
}

p <- ggplot(mtcars, aes(factor(vs), mpg, colour = factor(am))) +
geom_boxplot() +
stat_summary(fun.data = give.n, geom = "text", fun.y = median)
p
``````

Thanks for any suggestions.

You can just use `position`:

``````p <- ggplot(mtcars, aes(factor(vs), mpg, colour = factor(am))) +
geom_boxplot() +
stat_summary(fun.data = give.n, geom = "text", fun.y = median,
position = position_dodge(width = 0.75))
p
``````

The `width` argument of `position_dodge()` controls the positioning on the horizontal axis. 0.75 is the sweet spot, see how it works for different numbers of groupings:

``````p2 <- ggplot(mtcars, aes(factor(vs), mpg, colour = factor(cyl))) +
geom_boxplot() +
stat_summary(fun.data = give.n, geom = "text", fun.y = median,
position = position_dodge(width = 0.75))
p2
``````