You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 04:54:34