2

有没有一种简单的方法可以用 matplotlib/numpy 绘制许多变量的累积图?

我正在考虑这样的图表http://atlassian.wpengine.netdna-cdn.com/jira/cumulative-flow-diagram.png

例如,我有数据a=[0,3,6]b=[0,3,4]这应该成为计数图 [(0, a=1, b=1), (3, a=2, b=2), (4, a=2, b=3), (6, a=3, b=3)]。因此没有分箱,而是所有 x 值都得到一个点,特定变量的计数低于该值。a 和 b 值应相互堆叠。

我可以想象如何使用 bisect 实现复杂的交错预处理,但我看不到一个简单的解决方案。

有什么建议么?

编辑:累积计数的另一种解释:我有多个带有 x 值的数据行。例如a=[0,3,6], b=[0,3,4],c=[1, 7]

我需要每个数据行的图表。图的 x 坐标的可能值是所有数据行值的并集。在这里[0,1,3,4,6,7]

对于这些总 x 值中的每一个,特定行的 y 值将是该数据中有多少值低于 x 坐标。因此,对于 x 坐标,x=[0,1,3,4,6,7]我会得到ya=[1,1,2,2,3,3], yb=[1,1,2,3,3,3], yc=[0,1,1,1,1,2]. 当然我会使用堆积图:)

4

1 回答 1

2

您在链接中提到的情节类型可以通过stackplot. 参见例如画廊的这个例子:http: //matplotlib.org/examples/pylab_examples/stackplot_demo.html

我对示例数据的意思并不完全清楚。你能给出一个更详细的例子来说明你拥有的数据以及你想要获得什么吗?

编辑:一个非常简单的方法:

>>> a=[0,3,6]
>>> b=[0,3,4]
>>> c=[1, 7]
>>> 
>>> x = [0,1,3,4,6,7]
>>> 
>>> ya = []
>>> 
>>> val = 0
>>> for i in x:
...     if i in a:
...         val += 1
...         ya.append(val)
...     else:
...         ya.append(val)
... 
>>> ya
[1, 1, 2, 2, 3, 3]

但可能会有更有效的方法。您使用 numpy 还是 pandas 进行分析?还是使用普通列表?

于 2012-11-28T15:32:44.593 回答