我需要绘制直方图,但我的数据是在类间隔中。
以下是我的下限和上级。
xinf=c(0,10.5,11.5,12.5,13.5,14.5,15.5,16.5,17.5,18.5)
xsup=c(10.5,11.5,12.5,13.5,14.5,15.5,16.5,17.5,18.5,30)
频率:
Fo=c(2,5,16,42,69,51,32,23,9,1)
我不知道如何使用这些数据绘制直方图。
答案 0 :(得分:2)
因为您的数据已经汇总,所以我不会做出正确的"直方图。相反,我们可以用条形图伪造它:
barplot(Fo, width = xsup-xinf)
其中一个细微差别是因为它是条形图,所以条形图之间有空格。这可以通过以下方式删除:
barplot(Fo, width = xsup-xinf, space = 0)
或其他一些接近零值。
其他可选组件:axis(1)
,barplot(..., main="My Bars")
。
正如@EdwardCarney开始建议的那样,你可以像这样细化轴:
barplot(Fo, width = xsup-xinf, space = 0, main = "My Bars")
lbls <- sort(union(xinf, xsup))
axis(1, labels = lbls, at = lbls, las = 2)
(他的建议倾向于垃圾箱的中心,在这里我选择了它们的边界。无论哪种方式,你都有选择。请注意,如果你没有设置space=0
那么你必须调整位置标签,因为一切都会间隔开。)
答案 1 :(得分:0)
尝试类似
的内容hist(rep((xinf+xsup)/2, Fo), breaks = union(xinf,xsup),
xlab = 'Variable name', main='Histogram')
也许我会通过
更改变量xinf
和xsup
xinf=c(9.5,10.5,11.5,12.5,13.5,14.5,15.5,16.5,17.5,18.5)
xsup=c(10.5,11.5,12.5,13.5,14.5,15.5,16.5,17.5,18.5,19.5)
答案 2 :(得分:0)
以这种方式:
# data
Fo=c(2,5,16,42,69,51,32,23,9,1)
xinf=c(0,10.5,11.5,12.5,13.5,14.5,15.5,16.5,17.5,18.5)
# breaks for histogram bars
breaks = c(xinf, 30)
# make a histogram with temp data
h = hist(rep(1, length(Fo)), breaks = xx, plot = FALSE)
# Fill the density and counts manually
h$density = Fo / sum(Fo)
h$counts = Fo
plot(h, freq = TRUE)
请注意,freq = TRUE
部分是获取y轴计数所必需的。它还提供有关这些区域的警告信息。此外,对于密度估计,您可以使用比我使用的更复杂的东西。