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

R语言base R环境下如何基于多列频数表生成单张分组条形图

解决方案

实现思路

  • base R 的 barplot() 函数绘制分组条形图需要传入规整矩阵,设置beside = TRUE即可实现并列分组效果
  • 之前统计结果为列表,是因为部分列没有某类分类值的统计结果,需要先统一分类水平补全0值,生成符合要求的矩阵结构

完整实现代码

# 构造示例数据框
set.seed(123) # 固定随机种子方便结果复现,不需要可删除
df<-data.frame(A=sample(1:5,20,replace=T),
               B=sample(1:5,20,replace=T),
               C=sample(1:5,20,replace=T),
               D=sample(1:5,20,replace=T))

# 生成规整频数矩阵:行对应分类1-5,列对应变量A~D,缺失分类自动补0
freq_matrix <- sapply(df, function(x) table(factor(x, levels = 1:5)))

# 自定义条形颜色
bar_cols <- c("#2E9FDF", "#E7B800", "#FC4E07", "#00AFBB")

# 绘制分组条形图
bar_pos <- barplot(freq_matrix,
                   beside = TRUE, # 核心参数:开启并列分组模式
                   col = bar_cols,
                   main = "各变量取值分布频数",
                   xlab = "分类值",
                   ylab = "出现频数",
                   names.arg = rownames(freq_matrix),
                   ylim = c(0, max(freq_matrix)+2) # 调整Y轴上限预留标注/图例空间
)

# 添加图例
legend("topright",
       legend = colnames(freq_matrix),
       fill = bar_cols,
       title = "变量名称")

# 可选:在条形顶部标注具体频数值
text(x = bar_pos,
     y = freq_matrix + 0.3,
     labels = as.character(freq_matrix),
     cex = 0.8)

关键说明

之前的方法输出多张图,本质是因为对每个变量单独调用了barplot(),只要将所有变量的频数整合到同一个矩阵中,单次调用barplot()并开启beside = TRUE即可得到单张分组条形图。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:09:02