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

如何用ggplot2按分组变量x绘制每组双条形图(mean_1与mean_2)

分组绘制双条形图解决方案

你的需求是按分组变量x的每个取值,分别绘制mean_1和mean_2的条形图,每组显示两个并列条形。现有代码的问题在于两次调用geom_bar时未设置分组与位置调整,导致条形重叠,且未正确映射填充色区分系列。

解决步骤

  1. 转换数据为长格式
    ggplot更适合处理长格式数据,我们用tidyr::pivot_longer将宽格式的mean_1和mean_2列转换为两列:一列标识变量类型,一列存储对应数值。

  2. 调整ggplot代码
    映射fill到变量类型列,同时设置geom_bar的position = "dodge"让同组条形并列显示。

完整代码

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

# 生成数据
n <- 100
set.seed(123)  
data <- data.frame(
  x = round(runif(n, min = 3, max = 5)),
  mean_1 = rnorm(n, mean = 0, sd = 1),
  mean_2 = rnorm(n, mean = 0, sd = 1) + 0.3)

# 转换为长格式
data_long <- pivot_longer(data, cols = c(mean_1, mean_2), 
                          names_to = "variable", values_to = "value")

# 绘制并列条形图
ggplot(data_long, aes(x = factor(x), y = value, fill = variable)) +
  geom_bar(stat = "identity", position = position_dodge(width = 0.9)) +
  labs(x = "x", y = "Abs", fill = "指标类型") +
  scale_fill_manual(values = c("blue", "red")) +
  theme_minimal()

关键说明

  • pivot_longer:将宽数据转为长格式,生成的variable列用来区分mean_1和mean_2,value列存储对应数值。
  • fill = variable:通过填充色区分两个指标系列,配合scale_fill_manual设置自定义颜色。
  • position = position_dodge(width = 0.9):让同一x分组下的两个条形并列显示,width参数可调整条形间的间距。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 06:53:20