Аннотировать сгруппированный блок-график в ggplot - добавить количество наблюдений под блок-блоком
Я хочу добавить количество наблюдений под каждым блокпостом (как на рисунке - нет необходимости в красном квадрате).:) Тем не менее, я не знаю, как комментировать этот тип boxplot (см. Рисунок ниже). множественный блокпост комментирует количество наблюдений
кто нибудь знает как это сделать?
Это код, который я использовал для построения этой фигуры.
ggplot(data=MIOT1, aes(stage, time, fill=resp)) +
geom_boxplot(color= "black", lwd=0.3) +
stat_summary(fun.y=mean, geom="point", shape=0, size=1, colour="black", position=position_dodge(width=0.75)) +
scale_fill_manual(values=c("grey25", "grey50", "grey67")) +
annotation_custom(mygrobA) +
scale_y_continuous(limits=c(-10,124)) +
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
strip.background = element_rect(colour="black"),
panel.border = element_rect(colour = "black", fill="transparent")) +
xlab(bquote(' ')) +
ylab(bquote('Minimum Consecutive Time (s)')) +
labs(title="SATIATION\n") +
theme(axis.title.y = element_text(colour="black",size=10,face="bold"),
axis.text.x = element_text(colour="black",size=8, face="plain"),
axis.text.y = element_text(colour="black",size=8, face="plain"),
axis.title.x = element_text(colour="black",size=10,face="bold")) +
theme(panel.background = element_rect(fill = "white")) +
theme(plot.title = element_text(lineheight=.8, size=10, face="bold")) +
theme(legend.title=element_blank(), legend.key = element_rect(fill = NA, colour = NA)) +
theme(legend.position="none") +
theme(legend.background = element_rect(fill=NA)) +
theme(plot.margin = unit(c(.25,.25,.0,.0), "cm"))<i>
ПРИМЕР ДАННЫХ MIOT1 - это числовая переменная (ось Y), и я рассматриваю два фактора группировки (стадия развития - ось X) и ответ (не отвечает, прибрежный, лагунный).
Что-то вроде
stage resp time
pre U 100
pre U 80
pre U 50
pre C 20
flex U 80
flex U 90
flex C 10
flex C 20
post U 40
post U 30
post U 60
post C 80
post C 100
post L 50
post L 40
Спасибо! Pedro
2 ответа
Вот простой пример того, как это сделать, используя встроенный mtcars
фрейм данных:
ggplot(mtcars, aes(factor(cyl), mpg)) +
geom_boxplot() +
geom_text(stat="count", aes(label=..count..), y=min(mtcars$mpg)- 0.6)
В вашем случае это будет что-то вроде
ggplot(data=MIOT1, aes(stage, time, fill=resp)) +
geom_boxplot(color= "black", lwd=0.3) +
geom_text(stat="count", aes(label=..count..), y=min(MIOT1$time))
где вам, возможно, придется настроить y
расположение текстовых меток, и вам также может понадобиться настроить диапазон оси Y, чтобы освободить место для меток.
ОБНОВЛЕНИЕ: я смог воспроизвести ошибку, о которой вы сообщили, но я не уверен, как ее исправить. Вместо этого вы можете предварительно суммировать данные и затем добавить их к графику. Вот пример:
library(dplyr)
# Get counts by desired grouping variables
counts = mtcars %>% group_by(cyl, am) %>% tally
ggplot(mtcars, aes(factor(cyl), mpg, fill=factor(am))) +
geom_boxplot(position=position_dodge(0.9)) +
geom_text(data=counts, aes(label=n, y=min(mtcars$mpg) - 0.6),
position=position_dodge(0.9))
В РЕЗЮМЕ EIPI10 ОТВЕТИЛИ НА МОЙ ВОПРОС:
library(dplyr)
# Get counts by desired grouping variables
counts = mtcars %>% group_by(cyl, am) %>% tally
ggplot(mtcars, aes(factor(cyl), mpg, fill=factor(am))) +
geom_boxplot(position=position_dodge(0.9)) +
geom_text(data=counts, aes(label=n, y=min(mtcars$mpg) - 0.6), position=position_dodge(0.9)