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

R语言绘制0值单独分箱的不等宽直方图实现方案

R语言实现不等分分箱直方图的方法

完全可以实现你需要的效果,R中无论是基础绘图函数还是ggplot2都支持自定义分箱断点,你可以自由设置0值单独分箱、其余数值按需分箱的规则。

首先加载你提供的示例数据集:

fish<-structure(list(num = c(0, 11, 1, 0, 
                             13, 11, 0, 1, 0, 0, 11, 11, 0, 10, 1, 0, 0, 0, 0, 0, 0, 0, 
                             0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 9, 0, 2, 1, 0, 
                             7, 6, 0, 4, 8, 0, 8, 6, 0)), 
                class = "data.frame", row.names = c(NA,-50L))

方法1:基础R绘图实现

直接给hist函数的breaks参数传入自定义的分箱断点即可,示例里我们设置:

  • 第一个分箱仅包含0值
  • 剩余数值按照1-2、3-5、6-10、11-15四个区间分箱
# 自定义分箱断点,注意断点要覆盖数据的最小值和最大值
my_breaks <- c(-0.5, 0.5, 2.5, 5.5, 10.5, 15.5)
# 绘制直方图,xaxt='n'先不生成x轴,后续自定义刻度更清晰
hist(fish$num, breaks = my_breaks, freq = TRUE, 
     main = "鱼类计数分布直方图", xlab = "鱼类计数", ylab = "频数",
     col = "lightblue", xaxt = "n")
# 自定义x轴刻度标签
axis(side = 1, at = c(0, 1.5, 4, 8, 13), 
     labels = c("0", "1-2", "3-5", "6-10", "11-15"))

方法2:ggplot2实现

ggplot2的geom_histogram同样支持自定义breaks参数,绘图风格更灵活:

library(ggplot2)

ggplot(fish, aes(x = num)) +
  geom_histogram(breaks = c(-0.5, 0.5, 2.5, 5.5, 10.5, 15.5),
                 fill = "lightblue", color = "black") +
  scale_x_continuous(breaks = c(0, 1.5, 4, 8, 13),
                     labels = c("0", "1-2", "3-5", "6-10", "11-15")) +
  labs(title = "鱼类计数分布直方图", x = "鱼类计数", y = "频数") +
  theme_minimal()

如果你需要调整非0值的分箱规则,直接修改breaks向量里的断点数值即可,完全支持任意大小的分箱设置。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:45:06