在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
相关产品推荐
相关产品推荐

