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

如何在ggplot2中指定两组堆叠柱状图之间增加间距?

解决ggplot2中指定堆叠柱状图组间距增大的问题

要实现仅增大第二组(2007-08)和第三组(2008-09)之间的间距,其余组间距不变,可以通过将分类型x轴转换为自定义数值型轴的方式手动控制间距,具体步骤如下:

  1. 为数据添加自定义数值型x轴列,给需要增大间距的组设置更大的数值间隔
  2. 使用数值型列作为x轴,再将刻度标签映射回原年份分类
  3. 保持柱子宽度一致,确保视觉效果协调

完整代码示例

library(ggplot2)
library(dplyr) # 用于处理数据的条件赋值

rm(list = ls())

Year      <- c(rep(c("2006-07", "2007-08", "2008-09", "2009-10"), each = 4))
Category  <- c(rep(c("A", "B", "C", "D"), times = 4))
Frequency <- c(168, 259, 226, 340, 216, 431, 319, 368, 423, 645, 234, 685, 166, 467, 274, 251)
Data      <- data.frame(Year, Category, Frequency)

# 添加自定义数值x轴,手动调整组间距
Data <- Data %>% 
  mutate(x_num = case_when(
    Year == "2006-07" ~ 1,
    Year == "2007-08" ~ 2,
    Year == "2008-09" ~ 3.5, # 与前一组(2)的间距从1变为1.5,实现增大效果
    Year == "2009-10" ~ 4.5  # 保持和前一组的间距为1,与原间距一致
  ))

ggplot(Data, aes(x = x_num, y = Frequency, fill = Category, label = Frequency)) +
  geom_bar(stat = "identity", width = 0.8) + # 固定柱子宽度,保证视觉统一
  geom_text(size = 3, position = position_stack(vjust = 0.5)) +
  # 将数值轴刻度替换为原年份标签,还原可读性
  scale_x_continuous(
    breaks = c(1, 2, 3.5, 4.5),
    labels = c("2006-07", "2007-08", "2008-09", "2009-10")
  ) +
  xlab("Year") # 还原x轴标题

原理说明

  • 通过x_num列自定义每个年份组的位置,让2007-08(x=2)和2008-09(x=3.5)之间的间隔从默认的1变为1.5,精准增大目标间距
  • 其余组之间的间隔保持为1,和原图表的默认间距一致
  • scale_x_continuous负责将数值轴的刻度映射回原年份标签,避免数值轴影响图表的可读性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 03:48:35