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

