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

ggplot2使用position="dodge"时分组柱状图无法正确分组问题求解

问题原因

核心问题是两份数据集的分组对应逻辑存在本质差异:

  • 官方示例中,每个x轴类别(specie)下对应3种不同的condition分组值,同一个x轴位置有多个分组的数值需要展示,position="dodge"参数可以将这些柱子并排显示,实现分组效果
  • 你的数据集里,每个x轴类别(survey)仅对应唯一的modality分组值:A Pre/A Post仅属于CLASS分组、B Pre/B Post仅属于ONLINE分组、C Pre/C Post仅属于HYBRID分组,同一个x轴位置只有1个柱子,自然不会出现并排分组的效果
解决方案

根据你实际的展示需求,可以选择以下两种调整方案:

方案1:调整映射逻辑,展示各教学模式的前后测得分对比

如果你需要按教学模式(modality)分组,对比每个模式下的前后测得分,直接调整x轴和填充的映射关系即可:

ggplot(df, aes(fill=survey, y=score, x=modality)) +
  geom_bar(position="dodge", stat="identity")

方案2:拆分字段,展示同一测量阶段下不同教学模式的得分

如果你需要在同一个x轴下对比三种教学模式的得分,先拆分survey字段为问卷组别和测量阶段,再调整绘图逻辑:

# 拆分survey字段
library(dplyr)
library(tidyr)
df_new <- df %>%
  separate(survey, into = c("survey_group", "stage"), sep = " ")

# 绘图:按测量阶段分面,同一阶段下展示三类教学模式的得分
ggplot(df_new, aes(fill=modality, y=score, x=survey_group)) +
  geom_bar(position="dodge", stat="identity") +
  facet_wrap(~stage)

内容的提问来源于stack exchange,提问作者Rob E.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 20:06:03