R语言如何基于数据框转换的矩阵绘制正确的分组条形图
R语言分组条形图绘制调整方案
问题核心原因
- 代码笔误:你创建的绘图矩阵名称为
pch,但设置行名时调用了不存在的对象bch,导致矩阵行名没有正确赋值。 - 矩阵结构不匹配
barplot()的分组逻辑:barplot()默认将矩阵的每一列作为一个大分组,每一行作为分组内的子类别。你当前的矩阵是行为通道、列为对比组别,直接绘图会以两个对比组别作为大分组,通道作为子类别,和你想要的「每个通道为一个分组,组内对比两个组别数值」的需求相反。
基础绘图调整代码
直接修改行名并转置矩阵即可得到符合预期的分组条形图:
# 修正行名赋值错误,给pch矩阵设置正确行名 rownames(pch) <- c("Ch1", "Ch2","Ch3","Ch4","Ch5","Ch6","Ch7","Ch8","Ch9","Ch10", "Ch11","Ch12","Ch13") # 转置矩阵,适配barplot的分组规则 pch_trans <- t(pch) # 绘制分组条形图,补充样式参数提升可读性 barplot(pch_trans, beside = TRUE, col = c("steelblue", "orange"), legend.text = c("Ch1to11", "Ch1to13"), xlab = "通道编号", ylab = "统计值", main = "各通道两组数值对比")
可选:ggplot2实现更美观的分组条形图
如果需要自定义样式更灵活的可视化,可使用ggplot2绘制:
# 安装依赖包(仅首次运行需要) # install.packages(c("ggplot2", "dplyr", "tidyr")) library(ggplot2) library(tidyr) # 将矩阵转换为ggplot2要求的长格式数据 pch_df <- as.data.frame(pch) pch_df$channel <- rownames(pch_df) pch_long <- pivot_longer(pch_df, cols = starts_with("for_Rch13"), names_to = "group", values_to = "value") # 绘图 ggplot(pch_long, aes(x = channel, y = value, fill = group)) + geom_col(position = position_dodge(0.9), width = 0.8) + scale_fill_manual(values = c("steelblue", "orange"), labels = c("Ch1to11", "Ch1to13")) + labs(x = "通道编号", y = "统计值", title = "各通道两组数值对比", fill = "分组") + theme_classic()
内容的提问来源于stack exchange,提问作者Ajay Prasad
相关产品推荐
相关产品推荐

