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

R语言实现按月份分组的双系列条形图(解决堆叠图问题)

问题描述

用户现有如下样本数据及预处理代码:

test  <- data.frame(person=c("A", "B", "C", "D", "E"), 
                    value1=c(100,150,120,80,150),     
                    value2=c(25,30,45,30,30)) 

library(reshape2) # 用于melt函数

melted <- melt(test, "person")

melted$cat <- ''
melted[melted$variable == 'value1',]$cat <- "first"
melted[melted$variable == 'value2',]$cat <- "second"

melted$Date <- seq.Date(as.Date("2021-01-01"), as.Date("2021-05-01"), "month")

原本用这段ggplot代码生成按cat分组的条形图:

ggplot(melted, aes(x = cat, y = value, fill = variable)) + 
  geom_bar(stat = 'identity')

现在想改成按月份展示的分组条形图:每个月份对应value1和value2两个并列的条形,但设置x=Date后得到的是堆叠图,需要调整成分组效果。

解决方案

要实现每个月份下两个条形并列,关键是给geom_bar设置position = position_dodge()参数,同时确保aes里用variable作为填充和分组的依据。

完整代码如下:

library(ggplot2)

ggplot(melted, aes(x = Date, y = value, fill = variable)) +
  geom_bar(stat = 'identity', position = position_dodge(width = 0.8)) +
  scale_x_date(date_labels = "%Y-%m", breaks = melted$Date) +
  labs(x = "月份", y = "数值", fill = "指标类型")

几点说明:

  • position = position_dodge(width = 0.8):控制并列条形的间距,width值可以按需调整,默认是0.9,设成0.8会让条形更紧凑些。
  • scale_x_date:用来格式化x轴的日期显示,确保每个月份清晰展示,避免日期格式混乱。
  • 如果想让条形完全对齐日期刻度,可以微调width参数,让position_dodge的宽度和条形宽度匹配,保证每个分组条形都在对应日期的位置上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 08:54:18