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
相关产品推荐
相关产品推荐

