首页 > 解决方案 > 如何在ggplot2的箱线图中添加每组的观察次数和中位数

问题描述

可能我的问题可能是重复的,但我不能只在ggplot2( tidyverse) 中做到这一点?

我想为箱形图的每个组/元素添加观察次数和中位数ggplot2

这是代表

library(tidyverse)

set.seed(123)

df <- iris %>% sample_n(100)

df %>% 
  mutate(grp = ifelse(Sepal.Width > mean(Sepal.Width), 'Gr-1', 'Gr-2')) %>%
  ggplot(aes(x = Species, y = Sepal.Length, fill = grp)) +
  geom_boxplot() +
  coord_flip() +
  facet_wrap(. ~ grp)

reprex 包创建于 2021-06-24 (v2.0.0 )

所有 6 个盒子的预期结果都是这样的

在此处输入图像描述

标签: rggplot2labelboxplot

解决方案


我认为您可以使用从文章中获取的以下解决方案。为此,我们可以使用stat_summary函数,但为此fun.data我们必须创建一个自定义函数来计算计数和中位数。需要注意的是,我们使用geom_textinstat_summary所以它需要xorylabel参数。因此,当我们编写自定义stat_box_sum函数时,我们必须确保生成的数据框具有这些美感作为列名:

stat_box_sum <- function(y, upper_limit = max(iris$Sepal.Length)) {
  DF <- data.frame(
    y = max(y),
    label = paste("N:", length(y), "\n",
                  "Median:", median(y), "\n")
  )
  DF
}

stat_box_sum(iris$Sepal.Length)
    y                    label
1 7.9 N: 150 \n Median: 5.8 \n

df %>% 
  mutate(grp = ifelse(Sepal.Width > mean(Sepal.Width), 'Gr-1', 'Gr-2')) %>%
  ggplot(aes(x = Species, y = Sepal.Length, fill = grp)) +
  geom_boxplot() +
  coord_flip() +
  facet_wrap(. ~ grp) + 
  stat_summary(
    fun.data = stat_box_sum, 
               geom = "text", 
    hjust = 0.7,
    vjust = 0.7)

在此处输入图像描述 我想唯一剩下的问题是我试图很快弄清楚的标签的调整。


推荐阅读