如何用ggplot2按分组变量x绘制每组双条形图(mean_1与mean_2)
分组绘制双条形图解决方案
你的需求是按分组变量x的每个取值,分别绘制mean_1和mean_2的条形图,每组显示两个并列条形。现有代码的问题在于两次调用geom_bar时未设置分组与位置调整,导致条形重叠,且未正确映射填充色区分系列。
解决步骤
转换数据为长格式
ggplot更适合处理长格式数据,我们用tidyr::pivot_longer将宽格式的mean_1和mean_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
相关产品推荐
相关产品推荐

