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

如何绘制展示各分类均值而非计数的柱状图?代码失效求助

解决ggplot2绘制Jour分类均值柱状图的问题

问题排查与修复方案

你的代码存在两处关键问题,导致绘图失效或不符合预期:

  1. 末尾多余的加号:最后一行theme() +的加号会触发语法错误,必须删除。
  2. 不必要的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 23:54:50