我的数据框格式如下:
Month Frequency
2007-08 2
2010-11 5
2011-01 43
2011-02 52
2011-03 31
2011-04 64
2011-05 73
我想根据这些数据创建一个直方图,使用X箱(X可能大约为15,但实际数据超过200个月),并使用频率列中的数据作为频率直方图的每个bin。我该如何做到这一点?
到目前为止,我已尝试过两种方法,使用hist()和barplot()命令。 hist()的问题在于它似乎没有给我任何方式来指定我想在直方图的频率计算中使用频率列。 barplot()的问题在于我在选择X bin时没有任何灵活性,如果省略了几个月,那么结果图实际上并不是真正的直方图,因为x轴不是连续的。
我现在唯一的想法就是使用barplot()方法,用Frequency为0填充缺失的月份值,并使用space = 0来删除栏之间的间距。问题在于选择任意数量的箱子并不是特别容易。
答案 0 :(得分:4)
ggplot2。
如果您的数据位于名为data.frame
的{{1}}中:
df
或者如果你想要连续的时间:
ggplot(df,aes(x=Month,y=Frequency))+geom_bar(stat='identity')
答案 1 :(得分:4)
要获得这种灵活性,您可能需要复制数据。以下是使用rep
执行此操作的一种方法:
n <- 10
dat <- data.frame(
x = sort(sample(1:50, n)),
f = sample(1:100, n))
dat
expdat <- dat[rep(1:n, times=dat$f), "x", drop=FALSE]
现在,您已将数据复制到data.frame expdat
中,这样您就可以使用不同数量的二进制位置调用hist
:
par(mfcol=c(1, 2))
hist(expdat$x, breaks=50, col="blue", main="50 bins")
hist(expdat$x, breaks=5, col="blue", main="5 bins")
par(mfcol=c(1, 1))
答案 2 :(得分:3)
是的,rep
解决方案会在大多数有趣/大型案例中浪费太多内存。 HistogramTools CRAN包中包含一个高效的PreBinnedHistogram
函数,它可以直接从二进制文件列表创建一个基本R直方图对象,并在提供原始问题时中断。
答案 3 :(得分:0)
另一种可能性是缩小你的频率变量一些大的因素,以便代表没有那么多的工作要做。然后用相同的因子调整直方图的垂直轴刻度。