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

