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

ggplot分面内实现多波次横向并排柱状图(类似geom_jitter)

ggplot2 实现同组内多波次柱状图横向并排

核心解决方案

要将堆叠柱状图改为同维度下不同调查波次(wave)的柱子横向并排,关键是修改geom_col()的position参数为position_dodge(),替代默认的堆叠模式。以下是完整代码示例和说明:

代码示例

假设你的数据集已整理为长格式(包含人口统计组、维度类型、调查波次、平均值四个核心字段):

library(ggplot2)

# 模拟符合需求的数据集(替换为你的真实数据)
df <- data.frame(
  人口统计组 = rep(c("男-白人", "男-黑人", "女-白人", "女-黑人"), each = 7*2),
  维度类型 = rep(paste0("维度", 1:7), 4*2),
  调查波次 = rep(c("Wave1", "Wave2"), each = 7, times = 4),
  平均值 = rnorm(4*7*2, mean = 50, sd = 10)
)

# 生成并排柱状图
ggplot(df, aes(x = 维度类型, y = 平均值, fill = 调查波次)) +
  geom_col(
    position = position_dodge(width = 0.8),  # 控制同组内柱子的并排间距
    width = 0.7                              # 调整单根柱子的宽度,避免重叠
  ) +
  facet_wrap(~ 人口统计组) +  # 按人口统计组分面展示,清晰区分不同组
  labs(x = "维度类型", y = "平均值", fill = "调查波次") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))  # 旋转x轴标签防止重叠

参数说明

  • position_dodge(width = 0.8):这是实现并排的核心,width值越大,同组内不同wave的柱子间距越宽
  • 如果你的人口统计组是拆分的两个变量(如性别和种族),可以改用facet_grid(种族 ~ 性别)实现更规整的分面布局
  • 若需要更紧凑的排版,可适当减小width参数(柱子宽度)和position_dodge的width值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 12:40:43