【问题标题】:Create a histogram for weighted values为加权值创建直方图
【发布时间】:2013-11-19 09:49:08
【问题描述】:

如果我有一个向量(例如,v<-runif(1000)),我可以绘制它的直方图(它看起来或多或少是一条水平线,因为v 是来自均匀分布的样本)。

但是,假设我有一个向量及其相关的权重(例如,w<-seq(1,1000)v<-sort(runif(1000)))。例如,这是table() 在更大数据集上的结果。

如何绘制新的直方图? (在这个例子中,它应该看起来更像 y=x 行)。

我想我可以通过使用rep (hist(rep(v,w))) 来扭转table 的影响,但是这个“解决方案”看起来很丑陋且资源繁重(创建一个大小为sum(w) 的中间向量),而且它只支持整数权重。

【问题讨论】:

  • 可以在ggplot的审美映射中添加weight,然后使用geom_histogram
  • @JakeBurkhead 我不知道!您能否将其添加为答案?
  • 你也可以plottable。不过,结果并不是一个直方图。

标签: r plot histogram weighted-graph


【解决方案1】:

Package plotrix 有一个函数 weighted.hist 可以做你想做的事:

w<-seq(1,1000)
v<-sort(runif(1000))
weighted.hist(v, w)

【讨论】:

  • 仅供参考,链接已失效。这是有关包裹的信息cran.r-project.org/web/packages/plotrix/index.html
  • @Adam_G 谢谢!更新了答案中的链接。
  • 该函数有问题:当我尝试向其添加曲线时,它不会在正确的位置绘制它...尝试例如` weighted.hist(rnorm(T),rep( 1,T)/T,col="wheat");曲线(dnorm(x),add=TRUE)`
  • 为什么线条会低于 x 轴?或者更确切地说,如何阻止线条低于 x 轴?
  • @DavidPell 这些是 x 轴上的刻度。这可能有助于摆脱那些:stackoverflow.com/questions/10393076/…
【解决方案2】:
library(ggplot2)
w <- seq(1,1000)
v <- sort(runif(1000))

foo <- data.frame(v, w)

ggplot(foo, aes(v, weight = w)) + geom_histogram()

【讨论】:

  • 这太棒了;很容易做加权直方图——而且很有效!但是文档(ggplot 3.1.1)中没有将“重量”列为geom_histogram(...)的美学。你是怎么知道的?
  • geom_histogram的示例中使用。不知道 5 多年前我是怎么知道的
【解决方案3】:

weights 包的替代方案是wtd.hist()

w<-seq(1,1000) v<-sort(runif(1000)) wtd.hist(x=v,weight=w)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-16
    • 1970-01-01
    • 2017-06-26
    • 1970-01-01
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多