从频率表中重新划分直方图

时间:2014-10-01 18:53:09

标签: r ggplot2 histogram

我有一个频率表(频率,值),并希望将其绘制为ggplot2中的直方图。 具体来说,我有每个值1 ... 1e6的频率,并希望休息1,2 ... 10,20 ... 100,200 ... 1000 ...

该表是根据庞大的数据集计算出来的,这就是为什么在this one等答案中建议使用rep不是一种选择。

这是一个最小的例子:

library(ggplot2)
data <- data.frame(count=(runif(1000) * 100), value=1:1000)
repdata <- data.frame(value=rep(data$value, data$count))
print(ggplot(repdata) + aes(x=value) + scale_x_log10() +
      geom_histogram(binwidth=0.1))

desired output

如何在不使用repdata行的情况下创建这样的图? 是否有一个聚合函数,它接受一个数据框和一个中断列表?

1 个答案:

答案 0 :(得分:2)

啊,直到现在我才发现我不必使用休息列表;我可以简单地从值计算bin索引并使用现有的聚合:

binw <- 0.1
data$bin <- floor(log10(data$value) / binw)

hdata <- aggregate(count ~ bin, data, sum)

print(ggplot(hdata) +
        aes(xmin=10^(bin * binw),
            xmax=10^((bin + 1) * binw),
            ymin=0,
            ymax=count) +
        scale_x_log10() +
        geom_rect())