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

R语言ggplot2绘制并列柱状图问题求助

解决ggplot2柱状图柱子重叠、实现并列显示的问题

你的问题核心是数据格式不符合ggplot2的要求,以及重复调用geom_col导致无法正确触发分组并列。ggplot2基于「整洁数据」设计,要求每个变量单独成列、每个观测单独成行,而你的数据是宽格式(两组百分比各占一列),需要先转换为长格式,再绘图就能解决重叠问题。

步骤1:转换数据格式

使用tidyr::pivot_longer将宽格式数据转为长格式,把两组百分比合并为一个数值列,同时新增一列标记分组:

library(ggplot2)
library(tidyr) # 用于数据转换

# 示例数据(读取本地文件时,确保read.csv2的分隔符匹配你的csv,或改用read.csv)
data <- structure(list(COG_category = c("NC", "S", "T", "Y"), 
                       involved_percent = c(22.01, 17.25, 14.96, 8.8), 
                       BO4_percent = c(20.47, 18.95, 7.83, 7.17)), 
                  class = "data.frame", row.names = c(NA, -4L))

# 转长格式
data_long <- pivot_longer(data, 
                          cols = c(involved_percent, BO4_percent), # 指定要合并的百分比列
                          names_to = "group", # 分组列的名称
                          values_to = "percent") # 数值列的名称

转换后的数据结构(整洁格式):

# A tibble: 8 × 3
  COG_category group             percent
  <chr>        <chr>               <dbl>
1 NC           involved_percent    22.0 
2 NC           BO4_percent         20.5 
3 S            involved_percent    17.2 
4 S            BO4_percent         19.0 
5 T            involved_percent    15.0 
6 T            BO4_percent          7.83
7 Y            involved_percent     8.8 
8 Y            BO4_percent          7.17

步骤2:绘制并列柱状图

用转换后的长格式数据绘图,仅需一次geom_col,通过fill = group指定分组,配合position = position_dodge()实现柱子并列:

ggplot(data_long, aes(x = COG_category, y = percent, fill = group)) +
  geom_col(width = 0.7, position = position_dodge(width = 0.8)) + # 调整width控制柱子宽度和间距
  scale_fill_manual(name = "Group", 
                    values = c("involved_percent" = "blue", "BO4_percent" = "red")) + # 修正原代码的名称笔误
  xlab("COG Category") + 
  ylab("Percentage") +
  ggtitle("COG Category Percentage Comparison") +
  theme(legend.position = "bottom") # 修正原代码的标点错误(去掉空格)

关键修正点说明

  1. 数据格式转换:宽格式转长格式是核心,让ggplot能识别同一COG类别下的两个分组数据,从而自动触发并列逻辑。
  2. 单一geom_col调用:避免重复调用geom_col,否则ggplot会将两组柱子视为独立图层,无法触发分组dodge。
  3. 参数错误修正:原代码中scale_fill_manual里的Candidate_percent是笔误,应对应involved_percent;theme中的legend. position多了空格,会导致参数无效。

内容的提问来源于stack exchange,提问作者se-tima

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 16:55:22