在下面的图中,我希望将观察次数(在这种情况下为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')
答案 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))