16

我在 R 中制作直方图时遇到问题。问题是我告诉它制作 5 个 bin,但它制作了 4 个,我告诉制作 5 个,它制作了 8 个。

data <- c(5.28, 14.64, 37.25, 78.9, 44.92, 8.96, 19.22, 34.81, 33.89, 24.28, 6.5, 4.32, 2.77, 17.6, 33.26, 52.78, 5.98, 22.48, 20.11, 65.74, 35.73, 56.95, 30.61, 29.82);

hist(data, nclass = 5,freq=FALSE,col="orange",main="Histogram",xlab="x",ylab="f(x)",yaxs="i",xaxs="i")

关于如何解决它的任何想法?

4

5 回答 5

23

使用中断参数:

hist(data, breaks=seq(0,80,l=6),
       freq=FALSE,col="orange",main="Histogram",
       xlab="x",ylab="f(x)",yaxs="i",xaxs="i")

在此处输入图像描述

于 2013-06-05T05:42:31.090 回答
14

指定为参数的整数nclass用作建议:

这个数字只是一个建议

另一种解决方案是将cut您的向量分成指定数量的组并绘制结果:

plot(cut(data, breaks = 4))

在此处输入图像描述

于 2013-06-05T05:19:36.710 回答
12

基于 Rob Hyndman 的回答:

也许更通用的解决方案是考虑数据的最小值和最大值以及中断数 = number_of_bins+1 进行中断。

hist(data,breaks=seq(min(data),max(data),l=number_of_bins+1), 
     freq=FALSE,col="orange",
     main="Histogram",xlab="x",ylab="f(x)",yaxs="i",xaxs="i")
于 2014-05-05T13:38:55.753 回答
2

如果您不反对使用基本图形以外的其他东西,那么总会有 ggplot2 做事的方式:

图书馆(ggplot2)

数据 <- data.frame(x=data)

    ggplot(data, aes(x=x))+
      geom_histogram(binwidth=18,color="black", fill="grey")+
      scale_x_continuous(breaks=c(0,20,40,60,80)

ggplot2 有很好的文档:https ://ggplot2.tidyverse.org/

对于直方图的具体示例:https ://ggplot2.tidyverse.org/reference/geom_histogram.html

于 2014-04-27T15:40:36.853 回答
2

我喜欢对我的数据点非常准确:

hist(data,breaks = seq(min(data),max(data),by=((max(data) - min(data))/(length(data)-1))))

这应该使过程自动化,几乎不需要手动输入。

于 2014-05-07T12:00:01.717 回答