在ggplot2中绘制带间距的离散分箱数据柱状图
离散整数数据分箱后绘制带间距的频数图
核心实现方案
通过自动分箱+补全零频数箱+离散型柱状图的组合,完美匹配需求:自动分箱、展示所有箱的频数、柱子带间距且标签居中。
完整代码示例
library(dplyr) library(ggplot2) library(tidyr) home_runs_df <- data.frame(home_runs = c(48, 40, 38, 37, 37, 37, 37, 37, 36, 36, 35, 34, 34, 34, 33, 33, 33, 33, 33, 33, 33, 32, 32, 32, 32, 32, 31, 31, 29, 29, 29, 29, 28, 28, 27, 27, 27, 27, 27, 26)) # 1. 自动分箱并统计频数,补全零频数箱 binned_data <- home_runs_df %>% # 用cut_width生成等宽分箱,按6箱计算宽度,boundary确保区间起始对齐整数 mutate(bin = cut_width(home_runs, width = diff(range(home_runs))/6, boundary = 25)) %>% count(bin, name = "frequency") %>% # 补全所有分箱,缺失的频数设为0 complete(bin, fill = list(frequency = 0)) # 2. 绘制离散型频数图 ggplot(binned_data, aes(x = bin, y = frequency)) + geom_col(width = 0.75) + # 调整width控制柱子间距 labs(x = "本垒打数区间", y = "频数") + theme(axis.text.x = element_text(hjust = 0.5)) # 标签居中于柱子下方
关键步骤说明
- 自动分箱:
cut_width可根据指定宽度或分箱数生成区间,boundary参数避免区间偏移,贴合整数数据逻辑。若要固定箱宽,直接将width替换为具体数值(如width=4)即可。 - 补全零频数箱:
tidyr::complete保留所有分箱类别,哪怕区间无数据,解决手动分箱丢失空箱的问题。 - 离散型柱状图:
geom_col针对离散类别绘制柱子,通过width参数轻松设置间距,天然区别于连续型直方图,体现离散特性。 - 标签对齐:
axis.text.x = element_text(hjust = 0.5)确保区间标签精准居中在对应柱子正下方。
其他可选分箱方式
若需要按等数量分箱(每个箱内数据量尽量相等),可将cut_width替换为cut_interval(home_runs, n=6),其余代码保持不变。
内容的提问来源于stack exchange,提问作者Jai Jeffryes
相关产品推荐
相关产品推荐

