【问题标题】:Re-bin histogram from frequency table从频率表中重新划分直方图
【发布时间】:2014-10-01 18:53:09
【问题描述】:

我有一个频率表(频率,值),并希望将其绘制为 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))

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

【问题讨论】:

    标签: r ggplot2 histogram


    【解决方案1】:

    啊,直到现在我才想到我不必使用中断列表;我可以简单地根据值计算 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())
    

    【讨论】:

      猜你喜欢
      • 2017-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多