【问题标题】:Creating a stacked histogram创建堆叠直方图
【发布时间】:2013-02-24 11:14:00
【问题描述】:

我有这个数据文件:

A
    169
    164
    164
    102
    150
    100
    145
B
    145
    107
    115
    120
    140

我想从中创建一个堆叠直方图。我想设置一个范围(比如 100 到 170),为 X 轴设置 bin 宽度(比如 10),它会计算每个 bin 中有多少(例如 140 到 149 在 A 中有 1和 B) 中的 2) 并使用条形图在 Y 轴上绘制计数。 A 计数和 B 计数的着色(或阴影或其他)会有所不同。 我尝试查看 gnuplot 的直方图演示,在某些情况下看起来确实相似,但我不知道如何使它工作。 python+matplotlib 或 R 也没有运气。 将数据重新排序为类似

 A B
 169 145
 164 107
 164 115
 102 120
 150 140
 100
 145

如果需要,这不是问题。

【问题讨论】:

  • 你试过什么?你能举一个可重现的例子吗? stackoverflow.com/questions/5963269/…
  • 好吧,我最接近做类似的事情是玩直方图的 gnuplot 示例。在那里,数据格式似乎已经被计算在内,也就是说我需要给它这样的东西:100-109 110-119 等等。4 2 等等……但在那种情况下,我可以自己计算在 python 中(例如)。我正在寻找一个简单的解决方案。如果您熟悉 GMT,类似于 pshistogram 命令,仅支持 2 个或更多数据集。

标签: r matplotlib gnuplot histogram


【解决方案1】:

在 R 中使用 Hadley Wickham 的 ggplot2 包制作堆叠直方图非常容易:

library(ggplot2)
h <- data.frame(var=sample(letters[1:2], 100, TRUE), 
                value=rnorm(100, 0, 10))

ggplot(aes(x=value, color=var), data=h) + stat_bin(binwidth=5)

删除color= 位会生成一个简单的直方图。

【讨论】:

  • 另外,请尝试使用fill 而不是colour