TL; DR - вам необходимо указать group=
aestheti c, поскольку ggplot2
не знает, в каких данных столбца предполагается уклоняться от текста geom.
К сожалению, мы не у вас нет ваших данных, но вот набор примеров, который может продемонстрировать обоснование здесь и функцию / потребность в group=
.
set.seed(1234)
df1 <- data.frame(detergent=c(rep('EDTA',15),rep('Tween',15)), cells=c(rnorm(15,10,1),rnorm(15,10,3)))
df2 <- data.frame(detergent=c(rep('EDTA',20),rep('Tween',20)), cells=c(rnorm(20,1.3,1),rnorm(20,4,2)))
df3 <- data.frame(detergent=c(rep('EDTA',30),rep('Tween',30)), cells=c(rnorm(30,5,0.8),rnorm(30,3.3,1)))
df1$smp='Sample1'
df2$smp='Sample2'
df3$smp='Sample3'
df <- rbind(df1,df2,df3)
Вместо использования stat_summary()
я просто собираюсь создать отдельный фрейм данных для хранения средних значений, которые я хочу включить в качестве текста в свой график:
summary_df <- df %>% group_by(smp, detergent) %>% summarize(m=mean(cells))
Теперь вот график и использование geom_text()
с уклонением:
p <- ggplot(df, aes(x=smp, y=cells)) +
geom_boxplot(aes(fill=detergent))
p + geom_text(data=summary_df,
aes(y=m, label=round(m,2)),
color='blue', position=position_dodge(0.8)
)
![enter image description here](https://i.stack.imgur.com/GFBzB.png)
Вы заметите, что все числа разделены вдоль y=
, отлично, но «уклонение» не работает. Это потому, что мы не предоставили никакой информации о том, как делать уклонение. В этом случае можно указать group=
aestheti c, чтобы ggplot2
знало, что это столбец, который следует использовать для уклонения:
p + geom_text(data=summary_df,
aes(y=m, label=round(m,2), group=detergent),
color='blue', position=position_dodge(0.8)
)
![enter image description here](https://i.stack.imgur.com/zHhvF.png)
У вас нет есть для поставки group=
aestheti c, если вы поставляете другой aestheti c, например color=
или fill=
. В случаях, когда вы даете и color=
, и group=
aestheti c, group=
aestheti c переопределит любой из других для целей уклонения. Вот пример того же, но где вам не нужен group=
aestheti c, потому что я переместил color=
вверх в aes()
(изменение заливки на оттенки серого, чтобы вы могли видеть текст):
p + geom_text(data=summary_df,
aes(y=m, label=round(m,2), color=detergent),
position=position_dodge(0.8)
) + scale_fill_grey()
![enter image description here](https://i.stack.imgur.com/AjIA3.png)
ЛЮБОПЫТНЫЙ ФАКТ : Уклонение все равно работает, даже если вы добавляете geom_text()
бессмысленную эстетику c это обычно работает для уклонения, например fill=
. Вы получаете предупреждающее сообщение Ignoring unknown aesthetics: fill
, но уклонение все еще работает:
p + geom_text(data=summary_df,
aes(y=m, label=round(m,2), fill=detergent),
position=position_dodge(0.8)
)
# gives you the same plot as if you just supplied group=detergent, but with black text
В вашем случае изменение строки stat_summary()
на это должно работать:
stat_summary(aes(x = Slope, y = Events.g_Bacteria, group = Detergent),...