r - 如何在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 个盒子的预期结果都是这样的
解决方案
我认为您可以使用从文章中获取的以下解决方案。为此,我们可以使用stat_summary
函数,但为此fun.data
我们必须创建一个自定义函数来计算计数和中位数。需要注意的是,我们使用geom_text
instat_summary
所以它需要x
ory
和label
参数。因此,当我们编写自定义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)
推荐阅读
- office365 - 将在线电子邮件交换到事件中心
- ruby-on-rails - 标题不存在时将正文内容显示为标题
- html - 为什么 flex-grow 会影响元素之间的间距
- android - 在两个扬声器中都能听到硬声相声
- java - java - 如何使用嵌套集模型将平面列表转换为Java中的嵌套树?
- asp.net-mvc - MVC 将文本框值绑定到模型中类列表中的属性以获取未知索引
- node.js - Node.js 获取函数的返回值并将其存储到变量中
- c# - 使用 OpenXML SDK 将包含注释的幻灯片从一个 PowerPoint 演示文稿复制到另一个
- javascript - 如何在 React 中显示子菜单链接
- firebase - Flutter Firebase Passwordless Authentication auth.isSignInWithEmailLink(link) 返回 false