有关绘制频率数据的最佳方法的建议

时间:2016-04-13 03:36:41

标签: r count histogram

我正在寻找有关表示数据框中列范围的频率计数的最佳方法的建议。

示例:

my_table<- data.frame('xcat' = c(1,1,1,2,2,2,5,10,10,10,11,11,11,14,14,14,
                             15,15,15, 17,17,17, 18,18,18,20,20,20))

在上面的数据框中,我想绘制从1到20的频率。 一种方法是使用hist(),将bin大小设置为1,即:

my_hist<- hist(my_table$xcat,
   breaks=seq(from = 0.5, to= (max(my_table$xcat)+0.5),
                               by =1))

如您所见,我添加了0.5的偏移量,因此每个bin将显示在对应的整数上。 另一种方法是创建一个包含计数的表,然后生成间隔:

my_tablecut = cut(my_table$xcat, breaks= seq(from =0.5, to =20.5,
                                         by = 1), right=FALSE)
my_tablefreq = as.data.frame(table(my_tablecut))
my_tablefreq$pos<- 1:nrow(my_tablefreq)
plot(my_tablefreq$pos, my_tablefreq$Freq, type = 'l')

在我写作时,我意识到使用条形图而不是直方图可能更为正确;在这种情况下,我仍然需要生成频率为0的类别,可能仍然使用&#39; cut&#39;功能,然后去&#39; barplot&#39;而不是&#39; plot&#39;。

我想知道这些方法是否有任何缺点,或者什么是更合适的方式来展示我想要的东西。如果我的目的不明确,请告诉我,或者我需要添加更多细节。

2 个答案:

答案 0 :(得分:2)

> table(my_table)
my_table
 1  2  5 10 11 14 15 17 18 20 
 3  3  1  3  3  3  3  3  3  3 

缺点是table不允许对bin大小进行任何调整。在您的情况下,符合要求的拟合是完美的,因为您要求的bin大小为1. cut允许bin-boundary的指定,甚至允许您选择是否是接近的左边界或右边界(或打开)。我的偏好是左边关闭,这不是默认值。

hist会在barplot只是绘图的情况下返回休息时间和休息时间中的计数(甚至更多):

> my_hist
$breaks
 [1]  0.5  1.5  2.5  3.5  4.5  5.5  6.5  7.5  8.5  9.5 10.5 11.5 12.5 13.5 14.5 15.5 16.5
[18] 17.5 18.5 19.5 20.5

$counts
 [1] 3 3 0 0 1 0 0 0 0 3 3 0 0 3 3 0 3 3 0 3

$density
 [1] 0.10714286 0.10714286 0.00000000 0.00000000 0.03571429 0.00000000 0.00000000 0.00000000
 [9] 0.00000000 0.10714286 0.10714286 0.00000000 0.00000000 0.10714286 0.10714286 0.00000000
[17] 0.10714286 0.10714286 0.00000000 0.10714286

$mids
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20

$xname
[1] "my_table$xcat"

$equidist
[1] TRUE

attr(,"class")
[1] "histogram"

答案 1 :(得分:1)

我更喜欢使用它:

plot(density(my_table$xcat))

enter image description here

这也可以更容易覆盖其他频率,例如:

my_table$xcatNew <- c(1,1,1,1,1,1,1,1,1,1,11,12,14,14,14,14,
                      15,15,15, 17,17,17, 18,18,18,18,20,20)

plot(density(my_table$xcat))
lines(density(my_table$xcatNew), col = "red")

enter image description here