在R中创建等频率直方图

zed5wv10  于 2023-06-27  发布在  其他
关注(0)|答案(1)|浏览(123)

我希望在R中创建一个等频率(又名等箱计数)直方图,理想情况下在ggplot中生成一个图。
在ggplot中,我可以看到一个等箱宽度图是非常直接的,如果你想让它们等宽,选择你有多少个箱也是如此。然而,要求R基于每个中接近相等数量的样本来创建bin宽度似乎更复杂……
非常感谢提前!
到目前为止,我已经使用了classInt包和ClassIntervals函数来定义波段(或bin宽度-最大值和最小值),这将在每个bin中给予相同数量的数据点(见下文),但不知道如何将其集成到代码中来定义直方图的bin宽度。

bands= classIntervals(dataset$Depth, 10, style = 'quantile')
bands
style: quantile
[0.1545109,0.1616876) [0.1616876,0.1682627) [0.1682627,0.1713514) 
                 2233                  2232                  2232 
[0.1713514,0.1736983) [0.1736983,0.1758581) [0.1758581,0.1792968) 
                 2233                  2232                  2232 
[0.1792968,0.1869507) [0.1869507,0.1913873) [0.1913873,0.2064948) 
                 2233                  2232                  2232 
[0.2064948,0.5918484] 
                 2233

有没有一种方法可以将这些带宽整合到直方图的基本ggplot代码中,也许可以通过定义“binwidth”?

ggplot(dataset, aes(x=Depth))+geom_histogram()

或者,是否有其他方法可以在R中创建等频率直方图?

5lhxktic

5lhxktic1#

您可以使用quantile创建基于分位数的断点:

x <- faithful$waiting
ncells <- 10
breaks <- quantile(x, seq(0,1,by=1/ncells))

根据数据点数量和单元格数量的比率以及是否存在关系,单元格可能不像上面的faithful数据示例中那样完全相等,它们只是近似相等:

table(cut(x, breaks=breaks))
(43,51] (51,55] (55,60] (60,71] (71,76] (76,78] (78,81] (81,83] (83,86] (86,96] 
     31      27      24      29      31      27      31      26      22      23

然后,这些断点可以用于hist()中的参数breaks

hist(x, breaks=breaks, prob=T)

相关问题