如何使用geom_col正确绘制带子分组的温度检测次数柱状图
问题排查与修复方案
原始代码的核心问题
- 第一个问题:
temp字段是连续数值类型,ggplot会默认把x轴渲染为连续轴,相同温度的不同分组会出现位置偏移,无法对齐到同一个柱子上 - 第二个问题:相同
date+temp+type2组合下存在多条重复记录(比如9月6日73度的band_2有2条测试记录),未聚合直接绘图会导致堆叠逻辑混乱、数值计算错误
修复后的代码
# 先聚合数据再绘图 df1 %>% # 按日期、温度、band类型分组,汇总总检测次数 group_by(date, temp, type2) %>% summarise(total_tests = sum(tests), .groups = "drop") %>% # 把温度转成因子,让x轴变成离散刻度,每个温度对应唯一柱子位置 mutate(temp = as.factor(temp)) %>% ggplot(aes(x = temp, y = total_tests, fill = type2)) + # 堆叠柱状图,默认position就是stack,符合分组分布的需求 geom_col(width = 0.8) + facet_grid(.~date, scales = "free_x") + # 可选:调整x轴标签角度避免重叠 theme(axis.text.x = element_text(angle = 45, hjust = 1)) + labs(x = "温度", y = "检测总次数", fill = "类别")
效果说明
运行上述代码后,每个分面对应一天的数据,x轴每个刻度对应一个温度值,柱子总高度为该温度下的总检测次数,柱子内部不同颜色块对应各band类别的检测次数分布,完全匹配需求。
内容的提问来源于stack exchange,提问作者cephalopod
相关产品推荐
相关产品推荐

