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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 20:36:01