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

ggplot绘制按sex填充的物种数量柱状图报stat_count错误求助

错误原因

geom_bar()默认使用stat = "count"统计逻辑,功能是自动统计x轴分组对应的原始数据行数,不需要额外指定y轴映射,因此同时指定x、y、fill三个映射时就会触发你遇到的报错。
你使用的surveys_by_species是已经按species_id和sex分组统计好计数n的汇总数据集,不需要ggplot再自动统计行数。

解决方案

有两种可行写法:

写法1:保留geom_bar(),手动指定统计规则

给geom_bar()添加stat = "identity"参数,明确要求直接使用你提供的y轴n值作为柱子高度:

library(ggplot2)
library(forcats)

ggplot(data = surveys_by_species, 
       mapping = aes(x = fct_reorder(species_id, n, .desc = TRUE), 
                     y = n, 
                     fill = sex)) + 
  geom_bar(stat = "identity") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

写法2:使用更适配汇总数据的geom_col()

geom_col()默认的统计规则就是stat = "identity",直接复用你之前成功运行的初始代码,仅添加fill = sex映射即可:

library(ggplot2)
library(forcats)

ggplot(data = surveys_by_species,
       mapping = aes(x = fct_reorder(species_id, n, .desc = TRUE), 
                     y = n, 
                     fill = sex)) + 
  geom_col() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

可选调整

如果需要生成同物种下性别并列的柱状图,而非默认的堆叠效果,给geom_col()/geom_bar()添加position = "dodge"参数即可:

# 并列柱状图示例
ggplot(data = surveys_by_species,
       mapping = aes(x = fct_reorder(species_id, n, .desc = TRUE), 
                     y = n, 
                     fill = sex)) + 
  geom_col(position = "dodge") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:45:06