ggplot2 boxplot stat_summary按组放置文本

时间:2017-04-14 15:45:03

标签: r graph ggplot2 boxplot facet

在下面的图中,我希望将观察次数(在这种情况下为40)叠加在每个箱图的顶部。当fill美学时,我的代码不起作用。需要水平调整文本(在这种情况下,1个左侧,1个中心,1个右侧),以便它们正确覆盖相应的箱图。

dt <- data.table(
    x = factor(rep(1:2, each=120))
    , f = rep(letters[1:3], 40)
    , y = c(rnorm(120, 1:3), rnorm(120, 1:3*2))
)
table(dt$x, dt$f)

+--------------+
|      a  b  c |
+--------------+
|   1 40 40 40 |
|   2 40 40 40 |
+--------------+

frequencyAnnotation <- function(x) {
   c(y = (quantile(x, .75, names = F) + median(x))/2, label=length(x))
}
ggplot(dt, aes(x=x, y=y, fill=f)) +
    geom_boxplot() +
    stat_summary(fun.data = frequencyAnnotation, geom='text')

enter image description here

1 个答案:

答案 0 :(得分:2)

当您使用参数fill =时,当您的箱图被躲闪时,您必须将position_dodge()添加到stat_summary()来电。

ggplot(dt, aes(x=x, y=y, fill=f)) +
      geom_boxplot() +
      stat_summary(fun.data = frequencyAnnotation, geom='text', 
                   position = position_dodge(width = 0.75))