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.
相关产品推荐
相关产品推荐

