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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 12:40:28