GGPLOT箱线图按颜色细分,箱线图中间有平均值

Posted

技术标签:

【中文标题】GGPLOT箱线图按颜色细分,箱线图中间有平均值【英文标题】:GGPLOT box plot subdivided by color with means in middle of boxplot 【发布时间】:2021-07-01 05:28:48 【问题描述】:

我有两个分类变量的数据。我可以对这些进行箱线图,但我无法获得在正确位置显示的方法。 我已经在 iris 数据集中创建了效果(红色矩形是手动添加的,而不是在 ggplot 中)。

Iris <- iris %>%
        mutate(SepalLengthType = ifelse(Sepal.Length > 5.8, "high", "low"))

means <- Iris %>% 
        group_by(Species, SepalLengthType) %>% 
        summarise(Sepal.Width = mean(Sepal.Width), .groups = "keep")
plot <- ggplot(data = Iris, aes(y=Sepal.Width, x = SepalLengthType, colour = Species))+
        geom_boxplot()

现在我想为每个箱形图添加手段 下面的这些线都有效,但平均值不是以箱线图为中心,而是以 SepelLengthType 类别为中心。

plot + stat_summary(fun = "mean" , aes(color = Species), shape = 15)
plot + stat_summary(fun = "mean" , aes(group = Species), shape = 15)
plot + stat_summary(fun.y = "mean", shape = 15) # this works, but is deprecated
plot + geom_point(data = means, aes(color = Species), shape = 15)

如何在每个箱形图的中间显示均值? 我很感激我可以重新排列数据,这样每组数据点都在它自己的列中,但由于它们的长度不同,这需要它自己的解决方法。

当我使用 fun = "mean" 时,我收到一条警告消息“已删除 5 行包含缺失值 (geom_segment)。”这是为什么? “均值”行没有这个问题,但我宁愿不必自己计算均值。

【问题讨论】:

【参考方案1】:

你可以使用position=position_dodge(0.9) 像下面的代码

library(tidyverse)

Iris <- iris %>%
  mutate(SepalLengthType = ifelse(Sepal.Length > 5.8, "high", "low"))

means <- Iris %>% 
  group_by(Species, SepalLengthType) %>% 
  summarise(Sepal.Width = mean(Sepal.Width), .groups = "keep")

plot <- ggplot(data = Iris, aes(y=Sepal.Width, x = SepalLengthType, colour = Species))+
  geom_boxplot(position=position_dodge(0.9))

plot + geom_point(data = means, aes(color = Species), shape = 15, 
                  position = position_dodge2(width = 0.9))

或使用stat_summary作为

plot + stat_summary(fun = "mean", aes(group = Species), shape = 15, 
                  position = position_dodge2(width = 0.9))

【讨论】:

非常感谢,位置闪避成功了。你知道为什么我会收到警告吗? " 删除了 4 行包含缺失值 (geom_segment)。" 我认为是因为setosa在high类下没有任何价值。 不,我自己的数据也收到了同样的警告。我的数据删除了 4 行,这里删除了 5 行。它与箱线图的数量有关。如果我删除 colour= Species 并且只有两个箱线图,则警告消息会显示:“删除了 2 行包含缺失值 (geom_segment)。”

以上是关于GGPLOT箱线图按颜色细分,箱线图中间有平均值的主要内容,如果未能解决你的问题,请参考以下文章

Boxplot ggplot2:在分组箱线图中显示平均值和观察次数

格式化在 ggplot 的箱线图中显示为文本的数字。解释箱线图外均值的定位

ggplot 分组箱线图中的平均值 (R)

如何在ggplot的箱线图中按组绘制平均值

R:在箱线图ggplot上显示平均值和中值标签

如何使用ggplot2显示箱线图中的所有平均值? [复制]