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

R中绘制分组年龄二分类结果条形图遇异常求助

问题解决:年龄类别不显示且仅出现「No」条形的修复方案

先排查数据问题

首先确认数据本身是否存在异常:

  • 检查二分类变量的分布,确认是否真的有「Yes」样本:
table(data0$cancer.at.7.years)
  • 检查年龄分组的生成结果,确认每个区间都有样本:
table(data0$age_group)

如果数据中某年龄组无样本,或者cancer.at.7.years全为「No」,就会出现你遇到的现象。

修改代码修复显示问题

针对代码本身的潜在问题,做以下调整:

breaks <- c(0, 20, 40, 60, 100)

# 创建年龄分组时,加入include.lowest=TRUE确保0岁样本被纳入0-20组
data0$age_group <- cut(data0$Age, 
                       breaks = breaks, 
                       labels = c("0-20", "20-40", "40-60", "60-100"),
                       include.lowest = TRUE)

# 显式指定二分类变量的因子水平,强制保留「No」「Yes」两个类别(替换levels为你数据中实际对应的值)
data0$cancer_factor <- factor(data0$cancer.at.7.years, 
                              levels = c(0, 1),  # 比如0代表No,1代表Yes,根据你的数据调整
                              labels = c("No", "Yes"))

# 绘制分组条形图,使用position_dodge确保条形并排,preserve="single"保留空组的位置
ggplot(data0, aes(x = age_group, fill = cancer_factor)) +
  geom_bar(position = position_dodge(preserve = "single")) +
  labs(x = "年龄区间", y = "计数", title = "按年龄分组的二分类结果条形图") +
  scale_fill_discrete(name = "7年是否患癌") +
  theme_minimal()

关键修改说明

  1. include.lowest = TRUE:解决cut函数默认左开右闭导致0岁样本被排除的问题,确保所有年龄都能分到对应区间。
  2. 显式指定因子水平:即使数据中没有「Yes」样本,ggplot也会保留该类别的图例和条形位置,不会只显示「No」。
  3. position_dodge(preserve = "single"):让每个年龄组的两个条形并排显示,同时确保所有年龄区间都能在x轴上显示,不会因为某组只有一个类别而消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 11:23:20