如何绘制展示各分类均值而非计数的柱状图?代码失效求助
解决ggplot2绘制Jour分类均值柱状图的问题
问题排查与修复方案
你的代码存在两处关键问题,导致绘图失效或不符合预期:
- 末尾多余的加号:最后一行
theme() +的加号会触发语法错误,必须删除。 - 不必要的
position = "dodge":由于x轴和填充色都绑定了Jour,每个x类别对应唯一分组,该参数会导致柱状图错位或空白,完全不需要。
修复后的stat_summary代码
直接调整现有代码即可实现需求:
ggplot(expressiongenes, aes(x = Jour, y = NE.EcR.M, fill = Jour)) + stat_summary( geom = "bar", fun = "mean" ) + facet_wrap(~ Exposition) + scale_fill_manual(values = c("grey", "grey35", "grey20")) + theme_bw()
更可控的预处理方案(推荐)
先手动计算均值再绘图,能直观验证数据结果,避免stat_summary的潜在问题:
# 加载dplyr处理数据 library(dplyr) # 计算每个Jour+Exposition组合的均值(自动忽略缺失值) mean_data <- expressiongenes %>% group_by(Jour, Exposition) %>% summarise(mean_NE = mean(NE.EcR.M, na.rm = TRUE), .groups = "drop") # 绘制均值柱状图 ggplot(mean_data, aes(x = Jour, y = mean_NE, fill = Jour)) + geom_col() + facet_wrap(~ Exposition) + scale_fill_manual(values = c("grey", "grey35", "grey20")) + theme_bw()
额外检查项
- 确认
Jour是因子类型:如果是字符型,可通过expressiongenes$Jour <- factor(expressiongenes$Jour, levels = c("你的类别顺序"))指定显示顺序。 - 确认
NE.EcR.M是数值型:用class(expressiongenes$NE.EcR.M)查看,若不是则转换为数值:expressiongenes$NE.EcR.M <- as.numeric(expressiongenes$NE.EcR.M)。 - 检查数据缺失情况:确保每个分组有有效数据,
na.rm = TRUE可自动跳过缺失值。
内容的提问来源于stack exchange,提问作者Marion L
相关产品推荐
相关产品推荐

