1
在下面的圖表中,我希望觀察的數量(在這種情況下爲40)疊加在每個箱形圖上。如果有fill
美學,我下面的代碼不起作用。文本需要水平調整(在這種情況下,左側1箇中心,右側1個),以便正確覆蓋相應的箱形圖。ggplot2 boxplot stat_summary按組別排列的文字
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')
謝謝!我還沒遇到'position_dodge()'。這不是一個大問題,但是有沒有辦法避免硬編碼'width = 0.75'?即你可以通過編程來完成嗎? – Synergist
對於箱形圖和文本,如果更改x和f級別的數量,則這個0.75不會改變。 –
這是神奇的。有一個簡單的解釋,爲什麼?如果沒有,謝謝反正 - 它效果很好! – Synergist