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

R语言绘制含3个变量的分组条形图方法咨询

R语言绘制分组条形图

首先修正原始数据的列名(小写c会和R内置函数冲突,改为大写C):

D_data <- data.frame(month=c(1,2,3,4),
                     A=c(22,55,66,88),
                     B=c(7,8,5,8),
                     C=c(1,2,9,10))

方法一:基础R实现

基础R的barplot()函数可直接绘制分组条形图,核心参数是beside=TRUE:

# 提取数值矩阵(排除month列)
data_matrix <- as.matrix(D_data[, -1])
# 设置x轴标签为月份
rownames(data_matrix) <- paste("月份", D_data$month)

# 绘制分组条形图
barplot(data_matrix,
        beside = TRUE,          # 启用分组模式,每个月份对应多个条形
        col = c("#1f77b4", "#ff7f0e", "#2ca02c"),  # 自定义条形颜色
        xlab = "月份",
        ylab = "数值",
        main = "各月份A/B/C类别数值对比",
        legend.text = colnames(data_matrix),  # 图例文本为类别名称
        args.legend = list(x = "topright")    # 图例位置设为右上角
)

方法二:ggplot2实现(推荐,更灵活)

ggplot2需要长格式数据,先通过tidyr::pivot_longer()转换数据格式,再用geom_bar()绘制:

# 首次使用需安装包
# install.packages(c("ggplot2", "tidyr"))
library(ggplot2)
library(tidyr)

# 宽格式转长格式
data_long <- pivot_longer(D_data, 
                          cols = -month,  # 排除month列,转换其他列
                          names_to = "类别",  # 原列名转为"类别"列
                          values_to = "数值") # 原数值转为"数值"列

# 绘制分组条形图
ggplot(data_long, aes(x = factor(month), y = 数值, fill = 类别)) +
  geom_bar(stat = "identity", position = position_dodge()) +  # position_dodge实现分组
  labs(x = "月份", y = "数值", title = "各月份A/B/C类别数值对比") +
  scale_fill_manual(values = c("#1f77b4", "#ff7f0e", "#2ca02c")) +  # 自定义填充色
  theme_minimal()  # 简洁主题风格

关键说明

  • 基础R中beside=TRUE是实现分组的核心,若设为FALSE会绘制堆叠条形图
  • ggplot2中position_dodge()控制分组条形的间距,默认间距为0.9
  • 长格式数据是ggplot2绘图的标准格式,便于后续扩展(如添加误差线、分面等)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 04:40:53