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

在R中用ggplot2绘制多问题双组箱线图及布局调整

用ggplot2绘制多问题双组箱线图并调整布局

嗨,刚好我经常处理这类可视化需求,这就一步步教你搞定!

首先,数据格式是关键——ggplot2最适合处理「长格式」数据,而你现在的数据集应该是宽格式(每个问题一列,每组对应一列)。咱们先把数据转成tidy格式,用tidyr::pivot_longer就能轻松搞定。

第一步:准备/转换数据

先模拟一个和你情况匹配的数据集(你可以直接替换成自己的数据):

library(tidyverse)

# 模拟数据:4个问题,每组20个受访者得分
set.seed(123)
df <- tibble(
  id = 1:20,
  # 问题1的两组得分
  q1_groupA = rnorm(20, 5, 1),
  q1_groupB = rnorm(20, 6, 1),
  # 问题2的两组得分
  q2_groupA = rnorm(20, 4.5, 1.2),
  q2_groupB = rnorm(20, 5.5, 1.2),
  # 问题3的两组得分
  q3_groupA = rnorm(20, 6, 0.8),
  q3_groupB = rnorm(20, 5, 0.8),
  # 问题4的两组得分
  q4_groupA = rnorm(20, 5.2, 1),
  q4_groupB = rnorm(20, 5.8, 1)
)

# 转成长格式
df_long <- df %>%
  pivot_longer(
    cols = -id,
    names_to = c("question", "group"),
    names_sep = "_"  # 按下划线拆分列名,得到问题和分组
  )

第二步:绘制基础多问题箱线图

现在用ggplot2画所有问题的双组箱线图,核心是把question作为分面依据,group作为填充/分组变量:

base_plot <- ggplot(df_long, aes(x = group, y = value, fill = group)) +
  geom_boxplot(width = 0.6, alpha = 0.7) +  # 调整箱线图宽度和透明度
  labs(
    title = "各问题两组受访者得分对比",
    x = "分组",
    y = "得分",
    fill = "分组"
  ) +
  theme_minimal() +
  scale_fill_brewer(palette = "Set2")  # 用好看的配色方案

第三步:调整布局(一行/两行)

这一步就靠facet_wrap来控制排列了,非常灵活:

1. 所有箱线图排成一行

只需要设置nrow = 1:

# 一行布局
base_plot +
  facet_wrap(~question, nrow = 1) +
  theme(strip.text = element_text(size = 12, face = "bold"))  # 加粗问题标签

2. 排成两行(比如4个问题分成2行2列)

设置nrow = 2或者ncol = 2都可以:

# 两行布局
base_plot +
  facet_wrap(~question, nrow = 2) +
  theme(strip.text = element_text(size = 12, face = "bold"))

如果是5个问题,想排成2行(3个+2个),直接用nrow = 2就行,ggplot会自动帮你分配数量;要是想强制每行固定数量,用ncol = 3就能得到2行(3个+2个)的布局。

额外小技巧

  • 要是想让每个分面的y轴范围一致,加scales = "fixed"到facet_wrap里;如果每个问题得分范围差异大,用scales = "free_y"让y轴自适应。
  • 可以用geom_jitter()在箱线图上叠加散点,展示原始数据分布:
base_plot +
  geom_jitter(width = 0.2, alpha = 0.5) +  # 散点偏移避免重叠
  facet_wrap(~question, nrow = 2)

这样你就能轻松画出符合需求的单图布局,还能按需调整排列方式啦!

内容的提问来源于stack exchange,提问作者user567879

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:59:39