如何按Condition分组,绘制各变量箱线图(展示均值、Q1、Q3)
按Condition分组计算统计量并绘制箱线图
一、计算各Condition下的均值、Q1、Q3
使用dplyr的分组与批量统计功能,快速计算目标变量的关键统计量:
library(tidyverse) # 分组计算均值、Q1、Q3 summary_stats <- Actigraph %>% group_by(Condition) %>% summarize( across( c(Standing, Sitting, Stepping, Cycling), list( mean = ~mean(., na.rm = TRUE), Q1 = ~quantile(., 0.25, na.rm = TRUE), Q3 = ~quantile(., 0.75, na.rm = TRUE) ) ) ) # 输出统计结果 print(summary_stats)
这段代码按Condition分组,对Standing至Cycling四个变量分别计算均值、25分位数(Q1)和75分位数(Q3),na.rm = TRUE用于忽略数据中可能存在的缺失值。
二、绘制按Condition分组的箱线图
先将宽格式数据转换为长格式,再通过分面或批量绘图实现“每个Condition对应一张图、每张图包含四个变量箱线图”的需求:
方法1:分面绘制(所有图在同一画布)
# 转换为长格式数据 long_data <- Actigraph %>% pivot_longer( cols = c(Standing, Sitting, Stepping, Cycling), names_to = "Activity", values_to = "Duration" ) # 生成分面箱线图 ggplot(long_data, aes(x = Activity, y = Duration)) + geom_boxplot(fill = "#619CFF", alpha = 0.7) + facet_wrap(~Condition, scales = "free_y") + labs(x = "活动类型", y = "时长") + theme_minimal()
facet_wrap(~Condition)会自动为每个Condition生成独立面板,scales = "free_y"让每个面板的y轴根据数据范围自适应,避免因变量数值差异过大导致的可视化失真。
方法2:生成独立的单张图
如果需要每个Condition对应单独的图片对象,可使用purrr::map批量生成:
# 批量生成每个Condition的箱线图 condition_plots <- long_data %>% split(.$Condition) %>% map(function(sub_df) { ggplot(sub_df, aes(x = Activity, y = Duration)) + geom_boxplot(fill = "#00BA38", alpha = 0.7) + labs( title = glue::glue("活动时长分布 - Condition: {unique(sub_df$Condition)}"), x = "活动类型", y = "时长" ) + theme_minimal() }) # 查看所有生成的图 condition_plots
这段代码将数据按Condition拆分,为每个子集生成独立的箱线图,结果存储在condition_plots列表中,可单独调用或保存为图片文件。
内容的提问来源于stack exchange,提问作者Richard Michaud Langis
相关产品推荐
相关产品推荐

