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

在R语言中绘制数值预测变量与二分类结果柱状图报错求助

问题修复:身高分组与心脏病关联的柱状图

原代码的核心问题

  • 模拟的身高数据范围是0-140cm,但分组断点breaks从145cm开始,导致所有身高都无法匹配到分组,最终height_group全为NA,ggplot没有可绘制的数据
  • 心脏病变量的采样数量(1000)与身高观测数(540)不一致,不符合数据集540条观测的要求
  • 分组标签与断点数量不匹配:7个断点仅能生成6个区间,但标签写了7个

修正后的代码

library(tidyverse)

# 生成符合要求的540条观测数据,身高范围设为合理的140-180cm
data2 <- data.frame(
  height = runif(n = 540, min = 140, max = 180),
  heartdisease = sample(x = c(TRUE, FALSE), size = 540, replace = TRUE)
)

# 设置覆盖所有身高范围的5cm间隔断点
breaks <- c(140, 145, 150, 155, 160, 165, 170, 175, 180)
# 对应生成匹配的分组标签
labels <- c("140-145", "145-150", "150-155", "155-160",
            "160-165", "165-170", "170-175", "175-180")

# 创建身高分组,include.lowest确保最小值被纳入分组
data2$height_group <- cut(data2$height, 
                          breaks = breaks, 
                          labels = labels,
                          include.lowest = TRUE)

# 绘制分组柱状图,position="dodge"让不同心脏病状态的柱子并列显示(可选)
ggplot(data2, aes(x = height_group, fill = factor(heartdisease))) +
  geom_bar(position = "dodge") +
  labs(x = "身高分组(每5cm)", 
       y = "人数", 
       title = "身高与心脏病关联分布") +
  scale_fill_discrete(name = "心脏病", labels = c("否", "是")) +
  theme_minimal()

关键修改说明

  • 调整身高模拟范围为140-180cm,确保能匹配分组断点
  • 统一数据集行数为540条,符合题目要求
  • 断点数量比标签多1个,保证区间数量与标签数量一致
  • 添加include.lowest = TRUE,避免最小身高值被排除在分组外
  • 可选position = "dodge"参数,让不同心脏病状态的柱子并列,更便于对比

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 14:36:15