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

ggplot直方图首bin宽度异常,如何设置1-2、2-3等标准区间?

解决ggplot直方图区间对齐问题

要让直方图的区间严格按照1-2、2-3、3-4...划分,核心是通过boundary参数指定区间的起始边界为1,配合binwidth=1使用即可实现。

默认情况下,ggplot会自动选择区间的起始位置(通常围绕0对齐),这就导致你的直方图出现了1.0-1.5、1.5-2.5这类不符合预期的区间划分。设置boundary=1可以强制区间边界对齐到整数1,结合binwidth=1就能得到你想要的1-2、2-3等区间。

修改后的完整代码如下:

library(ggplot2)
library(scales)

# 定义数据
data <- data.frame (id= 1:141,
                  time = c(1.328767,33.909589,13.230137,32.331507,6.161644,20.167123,15.794521, 35.750685,3.958904,2.347945,1.756164,3.794521,46.961644,5.668493,14.775342,5.964384,15.268493,17.241096, 4.452055,17.372603,4.123288,28.945205,1.394521,9.515068,1.690411,5.734247,1.065753,5.405479,1.131507,8.39720,1.131507,1.065753,2.084932,13.460274,1.164384,6.786301,39.301370,1.197260,1.263014,1.098630,2.117808,1.230137,1.657534,1.065753,1.131507,13.986301,1.690411,1.065753,1.197260,2.249315,10.665753,1.690411,5.405479,4.452055,1.098630,1.065753,1.197260,1.065753,1.164384,1.493151,1.789041,1.394521,1.263014,17.701370,6.720548,24.605479,1.328767,13.197260,1.065753,4.189041,2.446575,30.852055,19.016438,28.813699,16.715068,29.438356,1.065753,1.230137,7.871233,4.386301,22.698630,1.295890,14.643836,1.131507,13.000000,3.991781,3.400000,17.964384,1.065753,2.512329,1.065753,3.827397,5.800000,21.745205,17.339726,1.164384,11.619178,9.515068,2.282192,4.189041,1.098630,1.065753,19.509589,25.591781,1.230137,28.747945,8.726027,1.065753,11.487671,30.720548,8.232877,19.871233,3.728767,1.986301,10.534247,8.956164,11.356164,11.520548,1.361644,4.484932,15.531507,1.493151,27.432877,10.468493,6.589041,1.065753,1.263014,1.065753,1.098630,35.421918,1.295890,9.810959,1.098630,21.547945,1.657534, 1.394521,1.065753,11.652055,1.164384,1.887671,1.098630))

# 绘制直方图
ggplot(data = data, aes(x = time)) +  
  # 指定区间宽度为1,边界对齐到1
  geom_histogram(aes(y = after_stat(count)/sum(after_stat(count))),
                 binwidth=1, boundary=1,
                 fill="#ED0000B2",color="#FFFFFF") +
  # 设置y轴为百分比格式,调整上限以显示40.4%的占比
  scale_y_continuous(breaks=seq(from=0,to=0.45,by=0.05),
                     expand=c(0,0),
                     labels=scales::percent,
                     limits=c(0, 0.45)) +
  # 设置x轴刻度为3个月间隔
  scale_x_continuous(breaks=seq(from=0,to=max(data$time),by=3),
                     expand=c(0,0)) +
  labs(title = '事件发生时间',
       caption=paste0("N=",n_distinct(data$id)),
       x = '启动后月数', 
       y = '(%)') +
  # 设置字体为Times New Roman
  theme(text=element_text(size=12,  family="Times New Roman"),
        plot.title = element_text(hjust = 0.5,face="bold"),
        plot.subtitle = element_text(hjust=0.5),
        panel.background = element_rect(fill="#FFFFFF"),
        axis.line = element_line(size = 0.2, colour = "#000000", linetype=1))

关键说明

  • boundary=1:强制所有区间的边界对齐到整数1,第一个区间即为[1,2),包含所有1.0到2.0之间的样本(共57个,占比40.4%),后续区间依次为[2,3)、[3,4)等。
  • 调整y轴上限到0.45,确保40.4%的柱形能完整显示(原代码y轴上限0.35会截断该柱形)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 07:44:54