matplotlib中许多变量的累积图?

时间:2012-11-28 15:20:44

标签: python matplotlib

有没有一种简单的方法可以使用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]。 当然我会使用叠加图:)

1 个答案:

答案 0 :(得分: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进行分析吗?或者使用普通列表?